直到今天,我仍然生活在使用RSA的RSA加密是确定性的印象中.毕竟,签名验证如果不是,应该如何工作?
令我惊讶的是,RSACryptoServiceProvider当使用相同的密钥加密相同的字节集时,.NET 没有稳定的输出:
[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;
}
Run Code Online (Sandbox Code Playgroud)
我已经浏览了PKCS规范,我确实理解了RSA背后的数学,所以我真的很想知道为什么我观察输出是不稳定的.
Mono的RSA实现具有稳定的输出.不稳定的输出Encrypt不会影响解密,这很可能并产生预期的数据.