[英]RSA - How to check for public key info?
我使用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為公鑰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.