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

Java转C#(Xamarin):ECDSA签名JcaPEMKeyConverter替代方案问询

Xamarin中BouncyCastle ECDSA签名适配C#解决方案

针对你遇到的两个核心问题,直接给出落地的代码实现和思路:

1. 从PEM私钥转换为IPrivateKey

C#的BouncyCastle没有直接对应Java JcaPEMKeyConverter的类,但可以通过PemReader读取密钥对后,用DotNetUtilities完成转换。EC密钥的转换代码如下:

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Crypto.Parameters;

// 假设privateKeyPem是你的PEM格式私钥字符串
using var pemReader = new PemReader(new StringReader(privateKeyPem));
var keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();
// 将BouncyCastle的EC私钥参数转换为Android的IPrivateKey
var androidPrivateKey = DotNetUtilities.GetECPrivateKey((ECPrivateKeyParameters)keyPair.Private);

2. 支持多次添加数据的签名生成

分两种场景实现,按需选择:

场景一:用Android原生Signature类(和Java逻辑对齐)

Android的Signature类本身支持多次调用Update方法,和Java代码的调用方式完全一致:

using Android.Security;

// 初始化签名实例,算法要和原Java代码一致(比如SHA256withECDSA)
var signature = Signature.GetInstance("SHA256withECDSA");
signature.InitSign(androidPrivateKey);

// 多次添加待签名数据
signature.Update(firstDataBytes);
signature.Update(secondDataBytes);
signature.Update(thirdDataBytes);

// 生成最终签名
byte[] finalSignature = signature.Sign();

场景二:用BouncyCastle原生ISigner接口

如果不想依赖Android原生API,直接用BouncyCastle的签名器,同样支持多次添加数据:

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Security;

// 获取对应算法的签名器,注意算法名称格式(SHA-256withECDSA)
ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA");
// 用BouncyCastle的私钥参数直接初始化,无需转换为Android的IPrivateKey
signer.Init(true, keyPair.Private);

// 多次添加数据,每次传入字节数组、起始索引和长度
signer.BlockUpdate(firstDataBytes, 0, firstDataBytes.Length);
signer.BlockUpdate(secondDataBytes, 0, secondDataBytes.Length);

// 生成签名
byte[] finalSignature = signer.GenerateSignature();

注意事项

  • 确保安装了正确的BouncyCastle NuGet包:Xamarin项目建议安装BouncyCastle-PCL或Org.BouncyCastle
  • 算法名称要和原Java代码完全一致,避免因名称格式差异导致签名不匹配
  • 如果原Java代码用的是BouncyCastle的签名逻辑,优先选择场景二的实现,减少转换成本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:35:33