python - 为什么 AES.decrypt 不返回我的原始文本?

标签 python aes pycrypto

我正在尝试使用 AES 将一些密码安全地存储在自制的密码保险箱中,但出于某种原因,我无法从 AES.decrypt 中取回原始数据。这是我正在测试的代码:

from Crypto.Cipher import AES
from Crypto.Hash import SHA256

def sha1(text):
    s = SHA256.new()
    s.update(text)
    return s.hexdigest()

aes = AES.new('JG9A90cqiveJ8K7n', AES.MODE_CFB, 'g4vhFIR1KncRIyvO')

text = 'This is some text that will be encrypted'
encrypted_text = aes.encrypt(text)
decrypted_text = aes.decrypt(encrypted_text)

print 'Original:\t' + sha1(text)
print 'Encrypted:\t' + sha1(encrypted_text)
print 'Decrypted:\t' + sha1(decrypted_text)

它的输出:

Original:   099e17130a9c796c8b7f21f269a790e877c7f49b6a39deda33d4e7b63b80c049
Encrypted:  71006ff5dc695a32c020dbb27c45b4861ec10a76e40d349bf078bca56b57d5bb
Decrypted:  2683455f4ae01e3cd1cba6c2537712fee8783621f32c865b8d4526130ff0096d

我正在使用密码反馈模式,因为我希望能够加密和解密任何长度的字符串,而且它不会打扰我,因为它是逐字节工作的,因为我只是在计划关于加密小字符串。

我在这里做错了什么?

最佳答案

因为您使用相同的aes 对象进行加密和解密。加密后初始值已经改变。所以你没有使用相同的初始值进行解密。以下确实有效(重新声明 aes):

from Crypto.Cipher import AES
from Crypto.Hash import SHA256

def sha1(text):
    s = SHA256.new()
    s.update(text)
    return s.hexdigest()

aes = AES.new('JG9A90cqiveJ8K7n', AES.MODE_CFB, 'g4vhFIR1KncRIyvO')

text = 'This is some text that will be encrypted'
encrypted_text = aes.encrypt(text)

aes = AES.new('JG9A90cqiveJ8K7n', AES.MODE_CFB, 'g4vhFIR1KncRIyvO')
decrypted_text = aes.decrypt(encrypted_text)

print 'Original:\t' + sha1(text)
print 'Encrypted:\t' + sha1(encrypted_text)
print 'Decrypted:\t' + sha1(decrypted_text)

关于python - 为什么 AES.decrypt 不返回我的原始文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11629785/

相关文章:

python - 使用 C++ 时从二进制文件中读取 int 不正确

python - 创建 python win32 服务

java - python 相当于 java RSAIO.save

git - 检索 git 存储库时出现 teamcity aes256-cbc 错误

java - 将 Java AES 解密代码转换为 CryptoSwift

python - AES使用相同的 key 和iv重复加密相同的明文得到不同的结果

java - 如何在Python中生成TrueLicence

python - 如何正确调用函数并返回更新的数据框?

Python 从 readlines() 读取前四行

c# - 如何将 byte[] 反序列化为要在方法调用时转换的通用对象