我正在使用1.0.2p使用以下命令加密文件。
#openssl aes-128-cbc -e -k 'abcdefghijklmnop' -in my.txt -out myencrypt.txt
我的解密是基于Crypto.Cipher python模块。 这是我的代码。但是,我无法成功解密文本。 我不确定我在这里错过了什么?
from Crypto.Cipher import AES
def decrypt(ciphertext, key):
iv = ciphertext[:AES.block_size]
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = cipher.decrypt(ciphertext[AES.block_size:])
return plaintext.rstrip(b" ")
def decrypt_file(file_name, key):
with open(file_name, 'rb') as encrypt_file:
ciphertext = encrypt_file.read()
dec = decrypt(ciphertext, key)
with open("plain.txt", "wb") as plain_file:
plain_file.write(dec)
if __name__ == "__main__":
decrypt_file('myencrypt.txt', 'abcdefghijklmnop')
您的问题可能是 OpenSSL 1.0.2 仍然使用 MD5 而不是 SHA 作为其哈希算法。我对这个 Python 库不是很熟悉,但从文档中看,默认哈希算法是 SHA1。
从 new(( 的参数部分:
hashAlgo (哈希对象(——要使用的哈希函数。这可以是 Crypto.Hash 下的模块,也可以是从任何此类模块创建的现有哈希对象。如果未指定,则使用 Crypto.Hash.SHA1。
所以我相信正在发生的事情是你的加密行(使用 OpenSSL 1.0.2(在加密时使用 MD5,但 Python 库默认为 SHA1。因此,在调用new()
时,您需要更新 OpenSSL 版本和/或在 Python 代码中指定哈希算法。
我相信 OpenSSL 在 1.1.0 中进行了更新,以使用 SHA 算法进行哈希处理。在尝试从较旧的服务器解密存档时,我实际上遇到了这个问题,使用 OpenSSL 进行加密和解密,但版本不匹配。如果您在从旧版本的 OpenSSL 解密存档时遇到任何问题,您可能需要使用-md md5
指定较旧的哈希算法,例如:
openssl enc -aes256 -d -in your/input/file.encrypt -out your/output/file -md md5