2024-10-01 09:36:39 发布
网友
我尝试使用AES-256和Python和base64加密时间戳。使用以下命令生成与输出等效的OpenSSL:
openssl enc -aes256 -pass pass:'1Lw2*kx18#AvNuij*iRL1nY1UA_#k8$+' -nosalt -base64 <<< "1489355323"
我的python代码如下所示:
当前的输出是不同的,我需要获得与OpenSSL命令相同的输出。你知道我做错什么了吗?在
OpenSSLenc命令使用的密钥和iv是由^{}函数从密码派生出来的。您将需要重新生成该函数以使您的代码以相同的方式运行。在
enc
在Python中,它可能看起来像:
from hashlib import md5 # ... last = '' bytes = '' # 32 byte key (256 bits) + 16 byte IV = 48 bytes needed while len(bytes) < 48: last = md5(last + password).digest() bytes += last key = bytes[0:32] iv = bytes[32:48] # ... aes = AES.new(key, AES.MODE_CBC, iv) ciphertext = aes.encrypt( pad( timestamp ) )
不再推荐这种方案,但是enc命令仍然使用它。我相信OpenSSL正在考虑在将来提供一个更为更新的密钥派生功能。在
你还需要注意换行符。here字符串(<<<)将新行添加到字符串的末尾,您需要将其添加到正在加密的字符串中以获得相同的结果:
<<<
OpenSSL} 函数从密码派生出来的。您将需要重新生成该函数以使您的代码以相同的方式运行。在
enc
命令使用的密钥和iv是由^{在Python中,它可能看起来像:
不再推荐这种方案,但是
enc
命令仍然使用它。我相信OpenSSL正在考虑在将来提供一个更为更新的密钥派生功能。在你还需要注意换行符。here字符串(
^{pr2}$<<<
)将新行添加到字符串的末尾,您需要将其添加到正在加密的字符串中以获得相同的结果:相关问题 更多 >
编程相关推荐