NodeRSA не генерирует правильную зашифрованную строку для дешифрования RSACryptoServiceProvider C# - PullRequest
0 голосов
/ 29 апреля 2020

Моя задача - зашифровать данные во внешнем интерфейсе (reactJS) и расшифровать их во внутреннем интерфейсе (. net core 2.0). Я использую библиотеку NodeRSA во внешнем интерфейсе и RSACryptoServiceProvider во внутреннем интерфейсе.

Внешний интерфейс

  1. Я создал два ключа (publi c и private).
  2. Сохраните оба ключа.
  3. Затем я импортирую эти ключи и вызываю методы шифрования и дешифрования в модуле NodeRSA.
  4. Отлично работать в обе стороны.

Backend

  1. Сгенерировано два ключа.

  2. Сохранить .

  3. Используйте их и вызывайте для шифрования и дешифрования методов в RSACryptoServiceProvider.

  4. Awesome.

Затем я использую ключ publi c, который создается внешним интерфейсом и генерирует зашифрованную строку. затем я передаю его бэкэнду и пытаюсь расшифровать. но я получил ошибку «Неверный параметр» Но когда я использовал внешний интерфейс publi c и закрытые ключи для методов шифрования и дешифрования в бэкэнде. эти клавиши работают нормально.

Вот как я пытаюсь

Интерфейс (reactJS)

 const key_public = new NodeRSA({ b: 1024 }); 
 key_public.importKey(public_key);
 let encryptedText = key_public.encrypt(this.state.secret, 'base64');
 console.log(encryptedText);

Backend ( . net core 2.0)

    public string DecryptFromMyKey(string crypherText)
    {
        var dataBytes = Convert.FromBase64String(crypherText.Replace(" ", "+"));
        string privateXmlString = "<?xml version=\"1.0\" encoding=\"utf-16\"?>....";
        RSACryptoServiceProviderExtensions.FromXmlString(csp, privateXmlString);
        var plainText = csp.Decrypt(dataBytes, false);
        var final = Encoding.Unicode.GetString(plainText);
        //string myKey = ExportPublicKeyToPEMFormat(csp, publicXmlString);
        return final;
    }

Я проверяю свои ключи и зашифрованные значения на этом сайте. https://8gwifi.org/rsafunctions.jsp. Согласно этому сайту, мои методы бэкэнда делают свою работу правильно. Это показывает правильный простой текст. но когда я пытаюсь это зашифрованный текст, созданный интерфейсом. Это не работает.

Я пропустил здесь какую-то часть кода? Есть ли какой-нибудь алгоритм для добавления кода внешнего интерфейса?

...