Как расшифровать с открытым ключом после шифрования с закрытым ключом?

326

Я зашифровал файл с помощью симметричного ключа с помощью opensslкомандной строки, а затем зашифровал этот симметричный ключ с помощью открытого ключа RSA. Я немного поэкспериментировал с шифрованием и дешифрованием, а затем случайно зашифровал симметричный ключ своим закрытым ключом RSA. Шифрование продолжалось без ошибок.

Так что теперь я не могу расшифровать симметричный ключ, чтобы добраться до моего файла. Есть ли opensslкоманда, которая расшифровывает с открытым ключом?


Командная строка, которую я использовал для шифрования:

openssl rsautl -encrypt -inkey private_key.pem -in symmKey.key -out symmKey.enc 

и для расшифровки я попытался использовать:

openssl rsautl -decrypt -inkey public_key.pem -pubin -in symmKey.enc -out symmKey.key 

Я также попытался проверить symmKey.encс:

openssl rsautl -verify -inkey public_key.pem -pubin -in symmKey.enc -out symmKey.key 

но тогда я получаю следующую ошибку:

RSA operation error 5968:error:0407008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding:crypto\rsa\rsa_pk1.c:67: 5968:error:04067072:rsa routines:rsa_ossl_public_decrypt:padding check failed:crypto\rsa\rsa_ossl.c:586:` 
1
Большое спасибо за вашу поддержку, она мне очень помогла, и в следующий раз мои вопросы будут по теме для этого сайта. 6 лет назад 0

1 ответ на вопрос

0
Maarten Bodewes

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

Таким образом, вы можете просто расшифровать, используя закрытый ключ:

openssl rsautl -decrypt -inkey private_key.pem -in symmKey.enc -out symmKey.key 

Обратите внимание, что модуль уже присутствует в закрытом ключе. Открытый ключ состоит из модуля и открытого показателя степени, который обычно устанавливается на пятое простое число Ферма: F4 со значением 0x010001 (65537). Поэтому его легко хранить в закрытом ключе, хотя бы для удобства.

Похожие вопросы