gpt4 book ai didi

Java ECDSAwithSHA256 签名长度不一致

转载 作者:行者123 更新时间:2023-12-02 10:51:49 28 4
gpt4 key购买 nike

因此,我尝试在 Java 中生成 ECDSAwithHA256 签名,为此,我使用 BouncyCaSTLe 提供程序。该曲线是 secp521r1。

初始化我正在使用的签名者:

public static final String SIGNATURE_ALGORITHEM = "SHA256withECDSA";

public void init() {
signer = Signature.getInstance(SIGNATURE_ALGORITHEM, BouncyCastleProvider.PROVIDER_NAME);
signer.initSign(privKey);
}

并签署我正在使用的

public byte[] sign(byte[] bytes) throws SignatureException {
signer.update(bytes);
byte[] signature = signer.sign();
System.out.println("Signature lenght is " + signature.length);
return signature;
}

现在唯一的问题是,当我运行代码时,我得到的签名长度在 137 到 139 字节之间。但我希望得到的字节数始终相同。有人知道我必须更改什么吗?我始终具有相同的签名长度,但仍然是标准化的签名格式?

最佳答案

Java 加密通常(默认情况下 Bouncy)使用可变长度的 ASN.1 DER 对 ECDSA(也称为 DSA)签名进行编码。参见neardupe ECDSA signature length和交叉https://crypto.stackexchange.com/questions/33095/shouldnt-a-signature-using-ecdsa-be-exactly-96-bytes-not-102-or-103 .

幸运的是,Bouncy(1.51 以上)还实现了 P1363 样式的固定长度编码,名称为 {hash}withPLAIN-ECDSA{hash}withCVC- ECDSA(也用斜线替换)。在这种情况下,CVC 显然意味着卡可验证证书,尽管我不认为签名编码是有限设备的证书验证中最难的部分。

更新: Bouncy 1.61 (2019-02) 修复了评论中提到的“普通”编码中的错误。此外,在 Java 9 (2018-12) 中,标准 (Oracle) SunEC 提供程序支持此格式为 {hash}withECDSAinP1363format

关于Java ECDSAwithSHA256 签名长度不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52122705/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com