【问题标题】:How can I identify RSA Private key uniquely in C#如何在 C# 中唯一地识别 RSA 私钥
【发布时间】:2018-08-09 14:14:55
【问题描述】:

我正在使用充气城堡RsaPrivateCrtKeyParameter 读取 RSA 私钥。 我想获取一些属性来唯一标识 RSA 私钥。

privateKey = RSA 私钥的字节数

using (Stream stream = new MemoryStream(privateKey))
{
    using (var reader = new StreamReader(stream))
    {
        RsaPrivateCrtKeyParameters rsaPrivatekey;

        var privateKeyObject = new PemReader(reader).ReadObject();
        rsaPrivatekey = (RsaPrivateCrtKeyParameters) privateKeyObject;

        //KeyId = here some property of rsaPrivatekey to indentify this key uniquely 
    }
} 

我将rsaPrivatekey 转换为Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters。 我可以使用任何此类属性来唯一标识密钥吗?

我可以使用这些方法中的任何一种吗 - DP、DQ、P、PublicExponent、Q、QInv 或 GetHashCode 获取唯一数据以识别密钥。

我的要求是从 rsa 密钥(如 KeyId)中获取人类可读的字符串,因此必须唯一标识每个 rsa 密钥。可能是一些 KeyId 或指纹/指纹

【问题讨论】:

  • 我可以使用以下任何一种方法 DP、DQ、P、PublicExponent、Q、QInv 或 GetHashCode
  • 您能否分享更多代码以更好地了解您想要实现的目标?
  • 添加代码以便更好地理解
  • 您可以使用Dictionary<string, RsaPrivateCrtKeyParameters> rsaPrivatekeys 的字典来跟踪它吗?
  • 我不太明白你在问什么,你能不能只做一个键值对

标签: c# rsa bouncycastle sha


【解决方案1】:

他想存储私钥,但给他们一个索引参数,该参数根据密钥的内容是唯一的。

在这种情况下,我建议使用与私钥关联的私钥或公钥的 Sha256 散列,然后将两者存储在数据库中。

【讨论】:

    【解决方案2】:

    如果公共指数是固定的(通常为 65537),您应该只使用公钥模数的一些低位来形成索引,但不要打扰最低位,因为它总是“ 1"。这当然非常快。

    通过仅使用公钥,您不会冒将私钥信息泄露到索引中的风险。如果您将私钥和公钥存储在同一个数据库中,那么您可以执行类似附加“1”位然后获取原始索引并附加“1”位或“0”位的操作,具体取决于公共或私钥正在被索引。

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2010-11-21
      • 2016-11-08
      • 2011-07-31
      • 2013-07-17
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 2015-12-25
      相关资源
      最近更新 更多