簡體   English   中英

RSA-如何檢查公鑰信息?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM