Расшифруйте файл, зашифрованный в Python, используя только OpenSSL - PullRequest
0 голосов
/ 20 мая 2018

У меня есть файл, зашифрованный в 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?Или как мне изменить код, чтобы это было возможно?

1 Ответ

0 голосов
/ 20 мая 2018

Вы можете кодировать 64 отдельные компоненты, а затем разделять их, используя разделитель.Командная строка в основном основана на тексте, поэтому было бы проще запрограммировать, что, например, в Bash.

Режим EAX не поддерживается напрямую, поэтому использование режима CBC облегчит его.Похоже, что в командной строке OpenSSL не поддерживается никакой шифр AEAD на данный момент , поэтому вы потеряете подлинность, которую может предложить.

Наконец, комбинация OAEP ишифр не поддерживается, поэтому вам, возможно, придется обработать двоичный результат и преобразовать его в симметричный шифр, например, в шестнадцатеричные числа.

...