如何在C#中唯一标识RSA私钥

问题描述 投票:0回答:2

我正在使用充气城堡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密钥。它可能是一些密钥ID或指纹/指纹

c# rsa bouncycastle sha
2个回答
1
投票

他想要存储私钥,但是根据密钥的内容为它们提供唯一的索引参数。

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.