如何在SecureString中将私钥/公钥插入RSACryptoServiceProvider

时间:2016-06-02 11:03:38

标签: c# encryption rsa rsacryptoserviceprovider securestring

假设我在字符串const中硬编码了我的RSA密钥:

 private const String rsaXmlKey = "<RSAKeyValue>something</RSAKeyValue>

然后我可以用这种方式与RSACryptoServiceProvider一起使用:

 RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
 csp .FromXmlString(rsaXmlKey);

但我想做得更好,并将RSA密钥保存在SecureString中。我知道初始化SecureString有些问题,但没关系。 我想知道如何将SecureString传递给RSACryptoServiceProvider?

它是否支持SecureString?

我不想将SecureString转换为String,因为它是没有理由的。

1 个答案:

答案 0 :(得分:2)

不,无法通过SecureString导入私钥(采用ToXmlString格式)。

你的假设也没什么意义。

首先,您不应该在应用程序中嵌入私钥。某人提取,现在意味着你有虚假的安全性,这比没有安全性更糟糕。

对于两个,您不能安全地将文字字符串加载到SecureString中。一个常量字符串将被写入实习字符串表,这意味着它是可被发现的;打败你的假定愿望。对AppendChar的顺序调用进行硬编码意味着IL仍会将您的私钥拼出,然后返回到第1点。或者引用MSDN

  

永远不应该从String构造SecureString对象,因为敏感数据已经受到不可变String类的内存持久性影响。构造SecureString对象的最佳方法是来自一次一个字符的非托管源,例如Console.ReadKey方法。