RSACryptoPad каждый раз дает разные результаты

Я пытаюсь проверить правильность реализации RSA на примере RSACryptoPAD здесь: http://www.codeproject.com/Articles/10877/Public-Key-RSA-Encryption-in-C-NET

Но это всегда создает разные результаты шифрования. Разве RSA не просто мод и операция мощности? Но программа может правильно расшифровать все различные зашифрованные тексты. Мои результаты совпадают с сайтом http://nmichaels.org/rsa.py. Я думаю, что RSACryptoPAD занимается чем-то другим?


person ugur    schedule 20.03.2012    source источник


Ответы (1)


В коде используется RSACryptoServiceProvider. Линия

  byte[] encryptedBytes = rsaCryptoServiceProvider.Encrypt( tempBytes, true );

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

Есть отличный исторический пример того, почему это важно. "AF не хватает воды"

person mfanto    schedule 20.03.2012
comment
Спасибо. RSACryptoServiceProvider также переворачивает байты, я сделал это, и теперь я могу расшифровать только первый байт? ' Приватный ключ InvertibleRSAFunction; privateKey.Initialize(params.GetModulus(), params.GetPublicExponent(), params.GetPrivateExponent()); Расшифровщик RSAES_OAEP_SHA_Decryptor (закрытый ключ); StringSource(cipher, true, new PK_DecryptorFilter(rng, decryptor, new StringSink(ugur)) // PK_DecryptorFilter); // Источник строки ' - person ugur; 20.03.2012
comment
Пожалуйста, создайте новый вопрос об этом ugur, вы можете вставить туда свой код (я не думаю, что что-то нужно менять, но с достаточным количеством информации мы сможем помочь). - person Maarten Bodewes; 21.03.2012