RSA -如何检查公钥信息
本文关键字:检查 公钥 信息 何检查 RSA | 更新日期: 2023-09-27 18:17:30
我使用c#中的RSACryptoServiceProvider
加密和解密数据,当我生成一个新的密钥对时,我将私钥返回给方法的调用者,然后将公钥保存到自制的PKI(只是一个具有keyBlob和唯一标识符的字典)。
我的问题是:因为我需要存储公钥,我不想意外地在PKI中存储私钥。但是,由于我还需要实际地将私钥写入文件,因此我正在使用用ExportCspBlob
方法导出的字节数组。
我的问题:我如何确保,通过检查我解析到我的StoreKey
方法的byte[]
,它实际上是一个公钥,它不包含私钥信息?
为澄清起见,以下是相关代码:
public static bool StoreKey(byte[] publicKeyParameters, string uniqueIdentifier)
{
bool success = false;
if (!keyCollection.ContainsKey(uniqueIdentifier))
{
if (!keyCollection.ContainsValue(publicKeyParameters))
{
keyCollection.Add(uniqueIdentifier, publicKeyParameters);
success = true;
}
}
return success;
}
和GenerateKeys
方法:
public static byte[] GenerateKeys(string uniqueIdentifier)
{
byte[] privateKeyBlob;
using (var rsa = new RSACryptoServiceProvider(4096))
{
try
{
byte[] publicKey = rsa.ExportCspBlob(false);
privateKeyBlob = rsa.ExportCspBlob(true);
PublicKeyInfrastructure.StoreKey(publicKey, uniqueIdentifier);
}
finally
{
//// Clear the RSA key container, deleting generated keys.
rsa.PersistKeyInCsp = false;
}
}
return privateKeyBlob;
}
由于我正在处理两个不同的类,我想避免在PKI中初始化RSACryptoServiceProvider
,只是为了导入密钥并检查它。这可能吗?
根据MSDN, ExportCspBlob
的输出与CAPI兼容,并且根据CAPI BLOBHEADER的文档,第一个字节表示密钥类型。具体来说,如果第一个字节是0x07,则它是私钥,而0x06是公钥。