Java ECDSAwithSHA256签名,长度不一致

问题描述 投票:0回答:1

所以我试图用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 cryptography digital-signature bouncycastle ecdsa
1个回答
0
投票

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

幸运的是,Bouncy(1.51 up)也在名称为{hash}withPLAIN-ECDSA{hash}withCVC-ECDSA的情况下实现P1363风格的固定长度编码(并且还用斜线代替with)。在这种情况下,CVC显然意味着卡可验证证书,虽然我不认为签名编码是有限设备的证书验证最难的部分。

© www.soinside.com 2019 - 2024. All rights reserved.