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

Git Bash生成RSA密钥调用Abenity API报错,求转PKCS1格式方法

Fixing "Not an RSA key" Error with Abenity API Using Git Bash-Generated RSA Keys

我刚碰到过一模一样的问题——Abenity API要求的是PKCS1格式的PEM公钥(就是你说的-----BEGIN RSA PUBLIC KEY-----开头的那种),但ssh-keygen -t rsa -b 4096默认生成的公钥是OpenSSH格式(ssh-rsa开头),两者的编码结构不一样,所以API识别不了。下面给你两种简单的解决办法:

方法一:用Git Bash里的OpenSSL命令行转换

Git Bash自带OpenSSL工具,直接在终端里跑下面的命令就能把你的OpenSSH公钥转成PKCS1格式:

# 假设你的公钥文件叫id_rsa.pub,转换后输出id_rsa_pkcs1.pub
ssh-keygen -f id_rsa.pub -e -m PKCS8 | openssl rsa -pubin -RSAPublicKey_out -out id_rsa_pkcs1.pub

命令解释:

  • ssh-keygen -f id_rsa.pub -e -m PKCS8:把OpenSSH格式的公钥导出为PKCS8标准的PEM格式
  • openssl rsa -pubin -RSAPublicKey_out -out id_rsa_pkcs1.pub:把PKCS8格式的公钥转换成PKCS1格式的RSA公钥

转换完成后打开id_rsa_pkcs1.pub,你就会看到熟悉的-----BEGIN RSA PUBLIC KEY-----开头的内容了。

方法二:在C#代码里直接转换(无需手动处理文件)

如果不想每次都手动跑命令,可以用BouncyCastle库在代码里直接把OpenSSH格式的公钥字符串转换成PKCS1格式。

步骤:

  1. 先安装BouncyCastle的NuGet包:

    Install-Package BouncyCastle
    

    或者在Visual Studio的NuGet包管理器里搜索BouncyCastle安装。

  2. 用下面的代码实现转换:

    using Org.BouncyCastle.Crypto.Parameters;
    using Org.BouncyCastle.OpenSsl;
    using Org.BouncyCastle.Security;
    using System.IO;
    using System.Text;
    
    public string ConvertOpenSshToPkcs1PublicKey(string openSshPublicKey)
    {
        // 拆分OpenSSH公钥的各个部分(去掉开头的ssh-rsa和末尾的注释)
        var keyParts = openSshPublicKey.Split(' ', StringSplitOptions.RemoveEmptyEntries);
        var publicKeyBytes = Convert.FromBase64String(keyParts[1]);
    
        // 解析OpenSSH公钥为RSA参数
        var rsaParams = PublicKeyFactory.CreateKey(publicKeyBytes) as RsaKeyParameters;
    
        // 将RSA参数写入PKCS1格式的PEM字符串
        using var stringWriter = new StringWriter();
        var pemWriter = new PemWriter(stringWriter);
        pemWriter.WriteObject(new RsaKeyParameters(false, rsaParams.Modulus, rsaParams.Exponent));
        
        return stringWriter.ToString();
    }
    

使用示例:

// 你的OpenSSH格式公钥字符串
var openSshPubKey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC................G+KssB6SPx+WbGpmW";
// 转换成PKCS1格式
var pkcs1PubKey = ConvertOpenSshToPkcs1PublicKey(openSshPubKey);
// 现在pkcs1PubKey就是API需要的格式了

验证转换结果

不管用哪种方法,你都可以用OpenSSL命令验证转换后的公钥是否有效:

openssl rsa -pubin -in id_rsa_pkcs1.pub -text -noout

如果命令能正常输出公钥的模数(Modulus)和指数(Exponent),说明转换成功,拿去调用Abenity API就不会再报错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:25:49