为什么同一个字符串的AES加密密码总是不同的?

2024-09-30 05:32:00 发布

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

我有一个文件叫做普通.txt. 我的档案里有:

Hello Hello Hello Hello

我使用此命令对其进行加密:

^{pr2}$

然后我打印加密值如下:

buff = open("encrypted.bin")
cipher = buff.read()
buff.close()
print b64encode(cipher)

但价值总是不同的。密码不应该总是一样的吗?我使用相同的文件和相同的密码来加密它。以下是我的终端输出:

Richard-Knops-MacBook-Pro:python_test richardknop$ openssl enc -aes-128-cbc -salt -k "Hello" -in plain.txt -out encrypted.bin
Richard-Knops-MacBook-Pro:python_test richardknop$ python test.py U2FsdGVkX1+AmoQiIkYAxIYanLr/kbjMfEJPPLfeE/wtyxScvAKzb7K38ZxoI097
Richard-Knops-MacBook-Pro:python_test richardknop$ openssl enc -aes-128-cbc -salt -k "Hello" -in plain.txt -out encrypted.bin
Richard-Knops-MacBook-Pro:python_test richardknop$ python test.py U2FsdGVkX19vPD+OoiK7iSgYJiPMxuKGNWWrLlfBS0c3yCJkuv7QIBGEo2Q86UsV
Richard-Knops-MacBook-Pro:python_test richardknop$ openssl enc -aes-128-cbc -salt -k "Hello" -in plain.txt -out encrypted.bin
Richard-Knops-MacBook-Pro:python_test richardknop$ python test.py U2FsdGVkX1+3I8EC7u3lrcVPyD/JV12NAecWvTPXGga0Nh2cwqLAtGCDhLK6MI9g
Richard-Knops-MacBook-Pro:python_test richardknop$ 

Tags: testtxtrichardhellobinprobuffencrypted
3条回答

您得到不同加密字符串的原因是“enc-aes-128-cbc”。 CBC代表密码块链。所以,对于第二个块,第一个块的加密输出是aciv,所以每次你得到不同的字符串。 更多详情,谷歌“AES在CBC模式”

每次运行时都会得到不同的输出,因为每次运行命令时都会生成新的salt。为了为每个连续运行提供相同的salt,请使用-S salt选项,即

openssl enc -aes-128-cbc -salt -S "Salt" -k "Hello" -in plain.txt -out encrypted.bin

因为“盐”每次都不一样。例如,这可以防止对加密值的彩虹表类型的攻击。见http://en.wikipedia.org/wiki/Salt_(cryptography)

相关问题 更多 >

    热门问题