假设我在字符串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,因为它是没有理由的。
答案 0 :(得分:2)
不,无法通过SecureString导入私钥(采用ToXmlString格式)。
你的假设也没什么意义。
首先,您不应该在应用程序中嵌入私钥。某人将提取,现在意味着你有虚假的安全性,这比没有安全性更糟糕。
对于两个,您不能安全地将文字字符串加载到SecureString中。一个常量字符串将被写入实习字符串表,这意味着它是可被发现的;打败你的假定愿望。对AppendChar的顺序调用进行硬编码意味着IL仍会将您的私钥拼出,然后返回到第1点。或者引用MSDN:
永远不应该从String构造SecureString对象,因为敏感数据已经受到不可变String类的内存持久性影响。构造SecureString对象的最佳方法是来自一次一个字符的非托管源,例如Console.ReadKey方法。