Я использую RSACryptoServiceProvider для шифрования небольших блоков данных. Для решения, над которым я работаю, важно, чтобы, если один и тот же фрагмент исходных данных дважды шифровался одним и тем же открытым ключом, результат (зашифрованный блок данных) не совпадал.
Я проверил это на примере, и это сработало так, как я надеялся. Мой вопрос сейчас заключается в том, является ли это поведение разработанным и гарантированным, или если мне нужно добавить некоторую случайную часть к исходным данным, чтобы гарантировать, что блоки данных с одинаковыми данными больше не могут быть сопоставлены после шифрования.
Вот пример:
byte[] data=new byte[]{1,7,8,3,4,5};
RSACryptoServiceProvider encrypter = cert.PublicKey.Key as RSACryptoServiceProvider;
byte[] encryptedData = encrypter.Encrypt(data,true);
// encryptedData has always other values in, although the source data is always
// 1,7,8,3,4,5 and the certificate is always the same (loaded from disk)
Конкретный вопрос касается .net, но, может быть, ответ можно дать в целом для всех реализаций RSA, если он задуман?