簡體   English   中英

C# PEM 格式的 RSA 加密

[英]RSA Encryption in C# PEM format

我在 C# 中有一個方法,我傳遞了一個公鑰字符串。

public string RsaEncryptWithPublic(string clearText, string publicKey)

    {
      byte[] bytes = Encoding.UTF8.GetBytes(clearText);
      Pkcs1Encoding pkcs1Encoding = new Pkcs1Encoding((IAsymmetricBlockCipher) new RsaEngine());
      using (StringReader reader = new StringReader(publicKey))
      {
        AsymmetricKeyParameter parameters = (AsymmetricKeyParameter) new PemReader((TextReader) reader).ReadObject();
        pkcs1Encoding.Init(true, (ICipherParameters) parameters);
      }
      return Convert.ToBase64String(pkcs1Encoding.ProcessBlock(bytes, 0, bytes.Length));
    }

我傳遞的公鑰字符串是

string publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlUCQZso6P43gKqw0CfTlwYb3N+m4v6IME 4nPA3WXe52wFpDM/JCFWSdXa7BewlwzDYjblgwL4u59CPxNTPTh7LTD4xXOaGDJHjX5+YgqK4fb9rs ImjMpIACrND/LAdrq5mctWWzw3UtW3F+o+sNwIZM8n65ysS+Vhq9IypFlfuQbWrKjAcWZ3u1iLtplz yf/pjhOEyyZiBUnh6D219+pMiE9nhCpc4xkH1gnlGszIDBqZMMULtGJvFXydA1vv5HxxCYJ2ydEzmA KYxVgA9BGXPEGE89dQbeJsieTj+FSsp9oTm+4vi345opRvH8DWhmZc4OPSwBEL8pwgS7cUnKPtwIDA QAB";

我收到一個錯誤 Org.BouncyCastle.Security.InvalidKeyException: 'Not an RSA key'。 我傳遞給方法的公鑰格式不正確嗎?

發布的密鑰是 X.509/SPKI 格式的 RSA 密鑰。 PemReader需要一個 PEM 編碼的密鑰。 但是,發布的密鑰不是 PEM 編碼的,它在每 64 個字符后缺少頁眉、頁腳和換行符。 PEM 編碼的密鑰如下所示:

string publicKey = @"-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlUCQZso6P43gKqw0CfTl
wYb3N+m4v6IME4nPA3WXe52wFpDM/JCFWSdXa7BewlwzDYjblgwL4u59CPxNTPTh
7LTD4xXOaGDJHjX5+YgqK4fb9rsImjMpIACrND/LAdrq5mctWWzw3UtW3F+o+sNw
IZM8n65ysS+Vhq9IypFlfuQbWrKjAcWZ3u1iLtplzyf/pjhOEyyZiBUnh6D219+p
MiE9nhCpc4xkH1gnlGszIDBqZMMULtGJvFXydA1vv5HxxCYJ2ydEzmAKYxVgA9BG
XPEGE89dQbeJsieTj+FSsp9oTm+4vi345opRvH8DWhmZc4OPSwBEL8pwgS7cUnKP
twIDAQAB
-----END PUBLIC KEY-----";

關於換行符PemReader是可以容忍的:只有頁眉和頁腳必須在不同的行中。

順便說一句,從 .NET Core 3.0 開始, RSA.ImportSubjectPublicKeyInfo()支持以 X.509/SPKI 格式導入 DER 編碼的 RSA 密鑰。 從 .NET 5 開始,使用RSA.ImportFromPem()支持導入 PEM 編碼的 RSA 密鑰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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