Python 使用AES-256加密,如使用PyCrypto的OpenSSL
我正在尝试使用AES-256和带有base64的Python对时间戳进行加密。使用以下命令生成输出的OpenSSL等效项:Python 使用AES-256加密,如使用PyCrypto的OpenSSL,python,encryption,cryptography,pycrypto,Python,Encryption,Cryptography,Pycrypto,我正在尝试使用AES-256和带有base64的Python对时间戳进行加密。使用以下命令生成输出的OpenSSL等效项: openssl enc -aes256 -pass pass:'1Lw2*kx18#AvNuij*iRL1nY1UA_#k8$+' -nosalt -base64 <<< "1489355323" 目前输出是不同的,我需要获得与OpenSSL命令相同的输出。知道我做错了什么吗?OpenSSLenc命令使用的密钥和iv由函数从密码派生而来。您将需要重新生成
openssl enc -aes256 -pass pass:'1Lw2*kx18#AvNuij*iRL1nY1UA_#k8$+' -nosalt -base64 <<< "1489355323"
目前输出是不同的,我需要获得与OpenSSL命令相同的输出。知道我做错了什么吗?OpenSSL
enc
命令使用的密钥和iv由函数从密码派生而来。您将需要重新生成该函数,以使代码以相同的方式运行
在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 ) )
OpenSSL
enc
命令使用的密钥和iv由函数从密码中派生。您将需要重新生成该函数,以使代码以相同的方式运行
在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 ) )
你在用什么加密库?pycrypt。我更新了我的代码以包含imports我觉得这是一个密码与密钥的问题,但我不能玩它,因为我现在无法访问PyCrypto文档。也许可以尝试在openssl中使用
-K
和-iv
选项,而不是-pass
,看看是否匹配?不幸的是,openssl命令必须保持原样。我只能更新python代码您使用的加密库是什么?pycrypt。我更新了我的代码以包含imports我觉得这是一个密码与密钥的问题,但我不能玩它,因为我现在无法访问PyCrypto文档。也许可以尝试在openssl中使用-K
和-iv
选项,而不是-pass
,看看是否匹配?不幸的是,openssl命令必须保持原样。我只能更新python代码+1,还需要注意的是,您可以将-P
选项添加到openssl enc
,以查看它为特定命令派生了什么密钥和IV。在python 3.7中,您需要稍微调整这一点<代码>最后一个和字节
应初始化为b'
而不是'
,您可能需要将+密码
更改为+密码。编码('utf-8')
。否则,您将得到一个TypeError:Unicode对象必须在散列之前进行编码
Awesome!另外,您还可以将-P
选项添加到openssl enc
中,以查看它为特定命令派生了什么密钥和IV。在python 3.7中,您需要稍微调整这一点<代码>最后一个和字节
应初始化为b'
而不是'
,您可能需要将+密码
更改为+密码。编码('utf-8')
。否则,您将得到一个TypeError:Unicode对象必须在散列之前进行编码
Awesome!你让我很开心
timestamp = "1489355323\n"