Openssl 1.0.2p 解密失败?



我正在使用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

相关内容

  • 没有找到相关文章

最新更新