【发布时间】:2012-01-08 19:08:48
【问题描述】:
直到今天,我一直认为使用 RSA 进行 RSA 加密是确定性的。毕竟,如果不是,签名验证应该如何工作?
令我大吃一惊的是,.NETs RSACryptoServiceProvider 在使用相同的密钥加密相同的字节集时没有稳定的输出:
[Fact]
public void Learning()
{
const int keySize = 1024;
System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(keySize);
var bytes = GenerateRandomDataWithLength( 36 );
for (int i = 0; i < 4; i++)
Assert.Equal( rsa.Encrypt( bytes, false ), rsa.Encrypt( bytes, false ) );
}
byte[] GenerateRandomDataWithLength( int length )
{
Random r = new Random();
byte[] data = new byte[length];
r.NextBytes( data );
return data;
}
我浏览了PKCS Specification,并且确实了解 RSA 背后的数学原理,所以我真的很想知道为什么我观察到输出不稳定。
Mono 的 RSA 实现具有稳定的输出。 Encrypt 的不稳定输出不影响解密,这很有可能并产生预期的数据。
【问题讨论】:
标签: .net cryptography rsa rsacryptoserviceprovider pkcs#1