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

C# Bouncy Castle将ASN.1转换为r和s字节数组,c#,cryptography,digital-signature,bouncycastle,C#,Cryptography,Digital Signature,Bouncycastle,我有以下生成数字签名的代码: 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.Ge

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

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;
}

这段代码以ASN.1格式返回一个71字节的数组,但是我的消费代码希望签名是64字节,由r和s值组成。我想提取r和s字节数组。如何做到这一点?

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

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

这是详细解释的签名的DER编码ASN.1结构,特别是如何从中导出
r
s
。这是详细解释的签名的DER编码ASN.1结构,特别是如何从中导出
r
s