Я использую BouncyCastle и C # для шифрования строки с механизмом RSA и открытым ключом.
Я хочу расшифровать строку с помощью OpenSSL (Linux) и закрытый ключ с помощью терминала; на самом деле библиотекой OpenSSL, но у меня тоже проблемы с терминалом команд.
Я создал ключи с помощью команд OpenSSL
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
У меня проблемы с расшифровкой строки с помощью OpenSSL, я написал заглушку для crypt файла.
Это заглушка крипты
public static void CryptStringByPublicKey(string stringToCrypt)
{
var key = GetPublicKey();
var e = new Pkcs1Encoding(new RsaEngine());
e.Init(true, key);
var bytes = Encoding.ASCII.GetBytes(stringToCrypt);
var encryptedBytes = e.ProcessBlock(bytes, 0, bytes.Length);
// Which Encoding?
var stringToSave = Encoding.UTF8.GetString(encryptedBytes);
File.WriteAllText(@"C:\temp\encrypted_file", stringToSave);
}
public static RsaKeyParameters GetPublicKey()
{
const string privateKeyString = @"C:\temp\public_key.pem";
RsaKeyParameters publicKey;
using (var reader = File.OpenText(privateKeyString))
publicKey = (RsaKeyParameters)new PemReader(reader).ReadObject();
return publicKey;
}
Это командная строка в Linux для расшифровки
openssl rsautl -decrypt -in encrypted_file -out message.decrypted -inkey lora_private.pem
Я ожидал расшифрованную строку в message.decrypted, но openssl отвечает
140251030225344:error:0406506C:rsa routines:rsa_ossl_private_decrypt:data greater than mod len:../crypto/rsa/rsa_ossl.c:399:
Я пытался определить проблемы при кодировании массива char, я пробовал все виды кодирования (UTF8, ASCII).
Кто-нибудь может помочь мне с любыми предложениями?