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