【问题标题】:PyCrypto Decrypting Cipher text does no yield plaintextPyCrypto解密密文不会产生明文
【发布时间】:2013-10-19 08:22:10
【问题描述】:

我在玩 PyCrypto 的 AES 和 DES 实现。每次,我解密一个密文,我从纯文本加密,它给出随机字符串。

我尝试了以下方法:

from Crypto.Cipher import AES,DES
from Crypto import Random

iv_AES = Random.new().read(AES.block_size)
iv_DES = Random.get_random_bytes(8)

key_AES = 'abcdefghijklmnop'
key_DES = 'abcdefgh'

aes = AES.new(key_AES,AES.MODE_CFB,iv_AES)
aes1 = AES.new(key_AES,AES.MODE_CFB,iv_AES)
des = DES.new(key_DES,DES.MODE_CFB,iv_DES)
des1 = DES.new(key_DES,DES.MODE_CFB,iv_DES)

plaintext = 'Hello! World'

print plaintext == aes.decrypt(aes.encrypt(plaintext))
print plaintext == des.decrypt(des.encrypt(plaintext))
print plaintext == aes1.decrypt(aes.encrypt(plaintext))
print plaintext == des1.decrypt(des.encrypt(plaintext))

结果:

False
False
True
True

我不明白为什么会这样。

您能否解释一下这里实际发生了什么,为什么会这样?

【问题讨论】:

    标签: python-2.7 aes des pycrypto


    【解决方案1】:

    来自PyCrypto documentation

    这也意味着您不能重用一个对象来使用相同的密钥加密或解密其他数据。

    问题是您将不得不重新初始化您的密码,或者 - 可能更好 - 为加密和解密构建单独的对象实例。

    from Crypto.Cipher import AES,DES
    from Crypto import Random
    
    iv_AES = Random.new().read(AES.block_size)
    iv_DES = Random.get_random_bytes(8)
    
    key_AES = 'abcdefghijklmnop'
    key_DES = 'abcdefgh'
    
    aese = AES.new(key_AES,AES.MODE_CFB,iv_AES)
    aesd = AES.new(key_AES,AES.MODE_CFB,iv_AES)
    dese = DES.new(key_DES,DES.MODE_CFB,iv_DES)
    desd = DES.new(key_DES,DES.MODE_CFB,iv_DES)
    
    plaintext = 'Hello! World'
    
    print plaintext == aesd.decrypt(aese.encrypt(plaintext))
    print plaintext == desd.decrypt(dese.encrypt(plaintext))
    

    【讨论】:

    • 您能否提供我在 PyCrypto 文档中提到的确切页面。
    • 我确实为您提供了上面的链接...哦,等等,该网站使用旧式框架...我会修复链接...已修复
    猜你喜欢
    • 2015-01-17
    • 2020-12-19
    • 2017-02-10
    • 1970-01-01
    • 2023-04-04
    • 2014-01-18
    • 1970-01-01
    • 2012-04-16
    • 2014-05-14
    相关资源
    最近更新 更多