长度不一致的Java ECDSAwithSHA256签名

因此,我试图用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签名长度并交叉https://crypto.stackexchange.com/questions/33095/shouldnt-a-

signature-using-ecdsa-be-exactly-96-bytes-

not-102-or-103。

但是,对您来说幸运的是,Bouncy(1.51版以上)还实现了名称为 (并且也用斜杠代替with)的P1363样式固定长度编码。在这种情况下,CVC显然意味着卡可验证证书,尽管我不会认为签名编码是有限设备在证书验证中最困难的部分。

Bouncy 1.61(2019-02)修复了注释中提到的“普通”编码中的错误。另外,在Java

9(2018-12)中,标准(Oracle)SunEC提供程序支持以下格式:

以上是 长度不一致的Java ECDSAwithSHA256签名 的全部内容, 来源链接: utcz.com/qa/426587.html

回到顶部