我对仿射密码的密码分析不是100%有效的

2024-06-16 12:36:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须创建一个函数,将输入作为英语“p1”和“p2”的频率分析中的字母,以及密码文本“C1”和“C2”的频率分析中的字母,以及我使用的字母长度“AL”。我在Python中创建了一个函数来实现这一点,但它只在某些时候起作用。有时它给我一个错误,我不知道为什么。 这两个方程式是: s(r+p1)=C1(模型AL) s(r+p2)=C2(模型AL)

该代码应该计算用于解密给定密文的乘法和加法密钥。你知道吗

这是我的代码-第一个函数计算乘法模逆,第二个函数实现方程。你知道吗

def ModInverse(a, m):
    if gcd(a, m) != 1:
        return 'These are not co-prime.'

    # Calculate using the Extended Euclidean Algorithm:
    u1, u2, u3 = 1, 0, a
    v1, v2, v3 = 0, 1, m
    while v3 != 0:
        q = u3 // v3
        v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3
    return u1 % m
def decryption_keys_affine(p1, p2, C1, C2, AL):

    s = p2 - p1

    p3 = s * p1

    p4 = (p3 % AL)

    p5 = C1 - p4

    p6 = AL + p5

    p7 = ModInverse(s, AL)

    p8 = p7 * p6

    r = p8 % AL

    multi = ModInverse(s, AL)
    add = AL - r

    print(multi, add)

当我给它这个输入:

>>> decryption_keys_affine(5, 20, 9, 26, 26)
7 20
>>> 

它显示正确的答案。你知道吗

当我给它这个输入:

>>> decryption_keys_affine(5, 20, 41, 18, 42)
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    decryption_keys_affine(5, 20, 41, 18, 42)
  File "C:\Users\Herman\Desktop\crypto_math_functions.py", line 108, in decryption_keys_affine
    r = p8 % AL
TypeError: not all arguments converted during string formatting

它给了我那个错误,我不知道为什么。(第一个字母长度为26,第二个字母长度为10位数字和6个符号,即42)。你知道吗


Tags: 函数字母v3keysv2v1alp2
1条回答
网友
1楼 · 发布于 2024-06-16 12:36:33

原因如下:

return 'These are not co-prime.'

当应用于整数时,%运算符执行模运算。你知道吗

当应用于字符串时,它将执行字符串格式化。在提供给ModInverse的参数不是互质的情况下,它返回一个字符串,该字符串r = p8 % AL尝试格式化。由于返回字符串不包含格式说明符,因此会引发异常。你知道吗

在这种情况下,不应返回字符串,而应引发自己的异常,例如:

def ModInverse(a, m):
    if gcd(a, m) != 1:
        raise ValueError('The input arguments, {} and {}, are not coprime.'.format(a, m))

    # Calculate using the Extended Euclidean Algorithm:
    u1, u2, u3 = 1, 0, a
    v1, v2, v3 = 0, 1, m
    while v3 != 0:
        q = u3 // v3
        v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3
    return u1 % m

相关问题 更多 >