gpt4 book ai didi

python - 为什么我可以使用一个 DES key 加密数据并使用另一个成功解密?

转载 作者:太空狗 更新时间:2023-10-29 21:34:30 27 4
gpt4 key购买 nike

我尝试使用 pyDes 和 Crypto.Cipher.DES 模块实现 DES 算法。我发现一个问题,当我使用 82514145 key 加密然后使用 93505044 解密密码时,我可以检索解密的文本。我发现 256 个键的行为是这样的。这违反了密码学。我的代码如下:

    from Crypto.Cipher import DES
plain_text = 'asdfghij'
print 'plain Text: ', plain_text

des = DES.new('82514145', DES.MODE_ECB)
cipher_text = des.encrypt(plain_text)
print 'the cipher text is ', cipher_text

des = DES.new('93505044', DES.MODE_ECB)
print 'the decrypted text is: ', des.decrypt(cipher_text)

输出是:

plain Text:  asdfghij

the cipher text is @�Z����

the decrypted text is: asdfghij

我的工作有没有错误?我也用 pyDes 得到了相同的结果。

最佳答案

DES key 只有 56 位长,但由于奇偶校验位,它们被扩展到 64 位。每个字节的第八位应设置为确保odd parity .

许多加密库忽略奇偶校验位,这意味着有许多方法可以在 64 位 key 字符串中表示相同的 56 位 key 。事实上,有 28 种不同的方式,这就解释了为什么你找到了 256 个匹配的键。

您的示例包含两个仅奇偶校验位不同的键值。见下文 - 奇偶校验位在 [] 中:

82514145 
= 0x3832353134313435
= 0011100[0] 0011001[0] 0011010[1] 0011000[1] 0011010[0] 0011000[1] 0011010[0] 0000000[0]

93505044
= 0x3933353035303434
= 0011100[1] 0011001[1] 0011010[1] 0011000[0] 0011010[1] 0011000[0] 0011010[0] 0000000[0]

这两个 key 实际上都不是真正有效的。该 key 的正确表示是:0x3832343134313401

关于python - 为什么我可以使用一个 DES key 加密数据并使用另一个成功解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23216138/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com