Проблемы дешифрования строки с помощью OpenSSL из зашифрованной строки с помощью BouncyCastle - PullRequest
0 голосов
/ 09 июля 2019

Я использую 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).

Кто-нибудь может помочь мне с любыми предложениями?

1 Ответ

0 голосов
/ 09 июля 2019

Не могу комментировать как слишком новый.

Попробуйте зашифровать как base64 перед отправкой, если вам нужно отправить как текст. Я сделал это в обратном порядке (php openssl -> c #)

Затем удалите пробелы.

byte[] encryptedBytes = Convert.FromBase64String(encrypted.Replace(" ", "+"));
...