Шифрование данных с использованием RSACryptoServiceProvider имеет то, что мне кажется странной функцией - PullRequest
6 голосов
/ 08 февраля 2012
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace EncryptionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            UnicodeEncoding ByteConverter = new UnicodeEncoding();

            byte[] dataToEncrypt = ByteConverter.GetBytes("Test data");

            string enc = Encrypt(dataToEncrypt);         
        }

        static string Encrypt(byte[] data)
        {
            UnicodeEncoding ByteConverter = new UnicodeEncoding();
            RSACryptoServiceProvider encrypt = new RSACryptoServiceProvider();

            byte[] encryptedData = encrypt.Encrypt(data, false); //Repeat this line

            return ByteConverter.GetString(encryptedData);
        }

    }
}

Я использовал «Set Next Statement» для многократного выполнения следующего оператора, т.е. без выполнения каких-либо других строк кода.byte[] encryptedData = encrypt.Encrypt(data, false);

Я просмотрел байты в encryptedData и обнаружил, что байты в encryptedData меняются каждый раз.Конечно, это не так?Если открытый ключ не изменился и зашифрованные данные не изменились, то байты «encryptedData» также не должны меняться?

1 Ответ

5 голосов
/ 08 февраля 2012

Нет, он работает как задумано.Зашифрованные данные изменяются каждый раз, потому что они используют схему заполнения, которая использует случайные октеты для шифрования простого текста каждый раз, когда вы вызываете Encrypt.Единственное, что имеет значение, это если Decrypt(Encrypt(data)) возвращает исходный байтовый массив data.

Заполнение RSA ( OAEP или PKCS # 1 v1.5 совместимое заполнение ) требуется для RSA длябыть в безопасности.Случайная часть отступа также гарантирует, что зашифрованный текст, возвращаемый при многократном шифровании простого текста, различен.Это важное требование безопасности, злоумышленник не может найти информацию о простом тексте, просто ища повторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...