【问题标题】:ASCII Vigenere cipher not decrypting properlyASCII Vigenere 密码未正确解密
【发布时间】:2016-06-13 05:05:18
【问题描述】:

我的 Vigenere 密码程序都归结为两个列表。一个是表示要加密/解密的消息字符的 ASCII 数字列表,另一个是用于解密/加密消息的密钥的 ASCII 数字列表。

对于加密:

encryption = [((x + y) % 26) + ord('A') if x < 128 else x for x, y in zip(msglist, keylist)]

用于解密:

encryption = [((x - y) % 26) + ord('A') if x < 128 else x for x, y in zip(msglist, keylist)]

如果我输入 'Python' 和密钥 'love' 进行加密,我得到:

GYAXLN

不幸的是,当我尝试使用相同的密钥解密“GYAXLN”时:

PEZNUT

这不是应该的。我认为我的数学有问题,但我不能完全正确,直到现在一直在尝试不同的数字来看看什么是有效的(我的数学不是最好的)。我在这里想念什么?不能全部在列表理解中完成吗?

【问题讨论】:

    标签: python list encryption cryptography vigenere


    【解决方案1】:

    问题出在(x - y) % 26这个语句中,因为一个数的mod是从0到m-1定义的,在上面的例子中是0到25,但是在减去时会得到负数,所以为了得到正确的结果你应该这样做(x - y + 26) % 26。如果我们通过(x-y) 得到的负值低于“-m”,在上述情况下低于-26,那么 no 仍然是负数,那么你必须将它设为正数,这是它的伪代码:

    val = (x - y) % 26
    while(val < 0) val += 26
    val = val % 26
    

    【讨论】:

    • encryption = [((x - y + 26) % 26) + ord('A') if x &lt; 128 else x for x, y in zip(msglist, keylist)] 仍然无法正常工作,当我尝试 decrpyt 时不断给我“PEZNUT”
    猜你喜欢
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多