【发布时间】:2010-11-20 16:13:59
【问题描述】:
如何使用 RSACryptoServiceProvider 类生成随机 RSA 公钥和私钥 (RSAParameters)? 每次创建 RSACryptoServiceProvider 的新实例时,我都会导出相同的密钥。
谢谢
【问题讨论】:
-
显示您的代码,不要让我们猜测。
标签: c# cryptography rsa rsacryptoserviceprovider
如何使用 RSACryptoServiceProvider 类生成随机 RSA 公钥和私钥 (RSAParameters)? 每次创建 RSACryptoServiceProvider 的新实例时,我都会导出相同的密钥。
谢谢
【问题讨论】:
标签: c# cryptography rsa rsacryptoserviceprovider
我对下面的代码做了一些测试,导出的参数总是不一样:
var rsaAlgo1 = new RSACryptoServiceProvider();
var rsaAlgo2 = new RSACryptoServiceProvider();
var xml1 = rsaAlgo1.ToXmlString(true);
var xml2 = rsaAlgo2.ToXmlString(true);
if (xml1 != xml2)
{
// it always goes here...
}
【讨论】:
Create()-方法实际上是抽象RSA-class(RSACryptoServiceProvider 的超类)上的静态方法,并创建RSA-class 的默认实现的实例。在大多数系统上,这将是RSACryptoServiceProvider - 但不是全部。更好的样式是var rsa = RSA.Create() 或var rsa = new RSACryptoServiceProvider。
使用以下代码,您永远不会得到所有相同的键
var rsa = new RSACryptoServiceProvider();
var rsaParams = rsa.ExportParameters(true);
但是您应该注意,指数键可以相同,如果经常是 65537(0x010001)
“选择一个整数 e 使得 1 RSA wiki
【讨论】: