Bouncy Castle 将 ASN.1 转换为 r 和 s 字节数组

Bouncy Castle convert ASN.1 to r and s byte arrays

我有以下生成数字签名的代码:

byte[] GetSignature(byte[] message, byte[] privateKey)
{
    var ecParams = NistNamedCurves.GetByName("P-256");
    var domainParameters = new ECDomainParameters(ecParams.Curve, ecParams.G, ecParams.N, ecParams.H, ecParams.GetSeed());
    var d = new BigInteger(1, privateKey);
    var privateKeyParameters = new ECPrivateKeyParameters(d, domainParameters);

    var signer = SignerUtilities.GetSigner("SHA-256withECDSA");
    signer.Init(true, privateKeyParameters);
    signer.BlockUpdate(message, 0, message.Length);

    var signature = signer.GenerateSignature();
    return signature;
}

此代码 returns 一个 ASN.1 格式的 71 字节数组,但是我的使用代码期望签名为 64 字节,由 r 和 s 值组成。我想提取 r 和 s 字节数组。我该怎么做?

在最新版本的 bc-csharp 中,您只需将“SHA-256withECDSA”更改为“SHA-256withPLAIN-ECDSA”,然后 GenerateSignature 将直接生成 64 字节签名而不是 ASN.1 值。