我遇到使用python和openssl进行加密的问题。
我写了这个小python脚本:#!/usr/bin/python
from Crypto.Cipher import AES
obj = AES.new('Thisisakey123456', AES.MODE_ECB)
message = "Sample text....."
ciphertext = obj.encrypt(message)
print ciphertext
当我使用此命令运行脚本时:
$ ./enc.py | base64
我得到了E0lNh0wtSg9lxxKClBEITAo=
。
如果我在openssl中做同样的事情(或者显然它不一样;))我会得到另一个结果:
$ echo -n "Sample text....." | openssl aes-128-ecb -k "Thisisakey123456" -nosalt -nopad | base64
yvNTGC+gwUK38uyJXIk/sQ==
我做错了什么?我期望相同的base64编码字符串。
顺便说一句:我知道ecb很糟糕,但我只是玩,所以没问题......;)答案 0 :(得分:2)
您可以尝试以下命令:
echo -n "Sample text....." | openssl aes-128-ecb -K 546869736973616b6579313233343536 -nopad | openssl base64
这明确指定了hexadecimals中的密钥。对于-k
,以下“密钥”实际上是一个密码,它通过名为EVP_BytesToKey
的OpenSSL基于密码的密钥派生函数(PBKDF)进行转换(使用SHA-1的一次迭代)。
结果是E0lNh0wtSg9lxxKClBEITA==
。这与E0lNh0wtSg9lxxKClBEITAo=
不同,但这是因为Python在密文中添加了一个换行符\n
,导致一个额外的字节要编码。