You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#基于BouncyCastle实现PEM格式RSA加密报非RSA密钥异常问题

问题根因

这个异常确实是公钥读取逻辑和传入的公钥格式不匹配导致的:
你代码里用的PemReader仅支持读取带标准PEM头尾标识的密钥内容,要求输入文本必须以-----BEGIN PUBLIC KEY-----开头、-----END PUBLIC KEY-----结尾。而你传入的是去掉了PEM头尾的纯Base64编码公钥内容,还插入了多处换行空格,PemReader无法从输入中解析出合法的RSA密钥参数,就会抛出Not an RSA key异常。

修复方案

二选一即可:

  • 方案1:将公钥补全为标准PEM格式,适配现有PemReader逻辑
    先把你现有公钥字符串里的所有空格、换行符全部删除,再补上PEM标准头尾,示例:
    string publicKey = @"-----BEGIN PUBLIC KEY-----
    

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlUCQZso6P43gKqw0CfTlwYb3N+m4v6IME4nPA3WXe52wFpDM/JCFWSdXa7BewlwzDYjblgwL4u59CPxNTPTh7LTD4xXOaGDJHjX5+YgqK4fb9rsImjMpIACrND/LAdrq5mctWWzw3UtW3F+o+sNwIZM8n65ysS+Vhq9IypFlfuQbWrKjAcWZ3u1iLtplzyf/pjhOEyyZiBUnh6D219+pMiE9nhCpc4xkH1gnlGszIDBqZMMULtGJvFXydA1vv5HxxCYJ2ydEzmAKYxVgA9BGXPEGE89dQbeJsieTj+FSsp9oTm+4vi345opRvH8DWhmZc4OPSwBEL8pwgS7cUnKPtwIDAQAB
-----END PUBLIC KEY-----";

用这个格式的公钥传入原有方法即可正常加密。
- 方案2:调整公钥读取逻辑,直接解析纯Base64格式公钥
如果你不想修改公钥字符串格式,可以去掉`PemReader`相关逻辑,先把公钥中的空白字符清理后转成字节数组,用`PublicKeyFactory`直接解析密钥参数,修改后的完整方法如下:
```csharp
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Security;
using System;
using System.Text;

public string RsaEncryptWithPublic(string clearText, string publicKey)
{
    byte[] clearBytes = Encoding.UTF8.GetBytes(clearText);
    Pkcs1Encoding encCipher = new Pkcs1Encoding(new RsaEngine());
    // 清理公钥字符串中多余的空白字符
    string cleanKey = publicKey.Replace(" ", "").Replace("\r", "").Replace("\n", "");
    byte[] keyBytes = Convert.FromBase64String(cleanKey);
    AsymmetricKeyParameter pubKeyParam = PublicKeyFactory.CreateKey(keyBytes);
    encCipher.Init(true, pubKeyParam);
    return Convert.ToBase64String(encCipher.ProcessBlock(clearBytes, 0, clearBytes.Length));
}

注意:无论选哪种方案,都必须先把公钥Base64内容里插入的空格、换行全部删除,否则后续Base64解码环节也会抛出格式异常。

内容的提问来源于stack exchange,提问作者ddb20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:18:32