3

我有一个名为plain.txt 的文件。在我的文件里面:

Hello Hello Hello Hello

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

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

然后我打印这样的加密值:

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$ 
4

4 回答 4

9

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

于 2012-08-05T17:52:34.157 回答
0

您获得不同加密字符串的原因是“enc -aes-128-cbc”。CBC 代表密码块链接。因此,对于第二个块,第一个块的加密输出作用为 ac IV,所以每次你得到不同的字符串。更多细节谷歌“CBC模式下的AES”

于 2013-11-15T13:50:33.003 回答
0

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

openssl enc -aes-128-cbc -salt -S "Salt" -k "Hello" -in plain.txt -out encrypted.bin
于 2013-11-20T15:14:18.180 回答
0

原因是key用于加密的实际是由您passphraseSALT. 那么即使您仍然使用相同的密码,密文也肯定会有所不同,因为密码SALT不同。

Openssl 默认使用 salt 来缓解字典攻击。如果您不想使用它,请使用与其他答案建议的相同的盐,或添加nosalt如下选项:

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

您可以使用十六进制查看密文xxd

xxd encrypted.bin
于 2019-03-27T02:54:48.347 回答