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

时间:2018-03-01 13:39:03

标签: c# rsa bouncycastle sha

我正在使用充气城堡master来阅读RSA私钥。 我想获得一些属性来唯一地识别RSA私钥。

privateKey = RSA私钥的字节

RsaPrivateCrtKeyParameter

我正在将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。 我可以使用任何此类属性来唯一标识密钥吗?

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

通过仅使用公钥,您不会冒泄漏有关私钥的信息进入索引的风险。如果您将私钥和公钥都存储在同一个数据库中,那么您可以执行类似附加" 1"然后取出原始索引并附加" 1"位或" 0"取决于公钥或私钥是否被编入索引。