【问题标题】:How do I insert private/public key in SecureString to the RSACryptoServiceProvider如何将 SecureString 中的私钥/公钥插入 RSACryptoServiceProvider
【发布时间】:2016-06-02 11:03:38
【问题描述】:

假设我已经在字符串 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,因为它是没有道理的。

【问题讨论】:

  • 不,RSACryptoServiceProvider 不支持 SecureString。你到底想做什么?应该没有充分的理由在您的应用程序中分发私钥,如果您只包含公钥,那么它不需要保护(因为它应该是公开的)

标签: c# encryption rsa rsacryptoserviceprovider securestring


【解决方案1】:

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

你的假设也没什么意义。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-11
    • 2019-05-28
    • 2013-05-18
    • 2016-08-16
    • 2012-11-19
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多