gpt4 book ai didi

java - 如何为 java.security.Signature 签名方法指定签名长度

转载 作者:行者123 更新时间:2023-12-02 02:23:18 24 4
gpt4 key购买 nike

对于我的应用程序,我尝试使用 java.security.Signature 类对一些字节内容进行签名。我遇到的问题是签名永远不会以固定长度生成。例如,有时生成的长度为 135、136 或 137 字节。有没有办法指定长度或末尾的一些填充?任何其他想法或评论表示赞赏。

    private byte[] ecdsaSign(ECPrivateKey key, byte[] content) throws Exception {
Signature ecdsaSign = Signature.getInstance("SHA256withECDSA", "SC");
ecdsaSign.initSign(key);
ecdsaSign.update(content);
byte[] signature = ecdsaSign.sign();
return signature;
}

最佳答案

对于 ECDSA Java 加密使用由 X9.62、SEC1 和 rfc 3279 sec 2.2.3 标准化的 ASN.1 DER 编码长度略有不同。另一个堆栈对此进行了更详细的介绍:https://crypto.stackexchange.com/questions/1795/how-can-i-convert-a-der-ecdsa-signature-to-ASN.1https://crypto.stackexchange.com/questions/33095/shouldnt-a-signature-using-ecdsa-be-exactly-96-bytes-not-102-or-103https://crypto.stackexchange.com/questions/37528/why-do-openssl-elliptic-curve-digital-signatures-differ-by-one-byte

对于 DSA 也是如此,但 RSA 则不然,其中签名(以及密码,因为 RSA 支持签名和加密)对于给定 key 来说是固定长度的,如 PKCS1 中的 I2OS 和 OS2I 所定义。

如果您想要不同的编码,例如 PKCS11 使用的固定长度编码(并且您的提供商名称“SC”暗示了这种可能性),则必须对其进行转换。

2019-10 新增:您不再需要自己使用 Java 进行操作; BouncyCaSTLe 自 1.61 (2019-02) 起正确支持这一点,Java 9 及以上 (2018-12) 中的 SunEC 也是如此。稍后请参阅近乎欺骗 Java ECDSAwithSHA256 signature with inconsistent length .

关于java - 如何为 java.security.Signature 签名方法指定签名长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48177791/

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