我有一个用Python加密的文件和pycryptodome
这样的文件:
from Crypto.PublicKey import RSA
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES, PKCS1_OAEP
key = RSA.generate(2048)
secret_key = key.exportKey(passphrase='letmein', pkcs=8, protection='scryptAndAES128-CBC')
public_key = key.publickey().exportKey()
rsa_key = RSA.importKey(public_key)
session_key = get_random_bytes(16)
cipher_rsa = PKCS1_OAEP.new(rsa_key)
cipher_aes = AES.new(session_key, AES.MODE_EAX)
ciphertext, tag = cipher_aes.encrypt_and_digest(data)
dst.write(cipher_rsa.encrypt(session_key))
dst.write(cipher_aes.nonce)
dst.write(tag)
dst.write(ciphertext)
我可以像这样解码它:
rsa_key = RSA.importKey(secret_key, 'letmein')
enc_session_key, nonce, tag, ciphertext = [
src.read(x) for x in (rsa_key.size_in_bytes(), 16, 16, -1)
]
cipher_rsa = PKCS1_OAEP.new(rsa_key)
session_key = cipher_rsa.decrypt(enc_session_key)
cipher_aes = AES.new(session_key, AES.MODE_EAX, nonce)
decoded = cipher_aes.decrypt_and_verify(ciphertext, tag)
有没有办法使用openssl
命令行解密文件?或者我应该如何修改代码才能实现?
答案 0 :(得分:1)
您可以对64个单独的组件进行编码,然后使用分隔符将它们拆分。命令行主要是基于文本的,因此在例如编程中更容易编程。击。
不直接支持EAX模式,因此尝试CBC模式会使其更容易。 OpenSSL命令行似乎现在不支持任何AEAD密码 ,因此您将失去可能提供的真实性。
最后,OAEP和密码的组合似乎不受支持,因此您可能必须处理二进制结果并将其转换为对称密码,例如:十六进制。