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
。