gpt4 book ai didi

java - 如何在 ECDSA 中处理具有较长基点顺序的短哈希

转载 作者:行者123 更新时间:2023-11-30 04:08:08 24 4
gpt4 key购买 nike

我正在使用 CVC 证书(如果您还没有听说过它们,请假装它们是 X509)以及带有 Brainpool256r1 曲线和 SHA1 哈希的椭圆曲线签名。在带有 bouncycaSTLe 的 java 中,我只是像这样验证它们:

Signature sign = Signature.getInstance("SHA1withECDSA", "BC");
sign.initVerify(key);
sign.update(certificate_data_to_be_verified);
sign.verify(signature);

一切正常。但是,我也需要在嵌入式设备中验证它们,并且遇到了问题,因为我应该使用最左边的 256 位哈希来至少根据 wikipedia ECDSA article 获取 z 的值。 。但 SHA1 只有 160 位。

bouncycaSTLe 是如何解决这个问题的,是否有一些关于如何处理这个问题的一般理论?

最佳答案

您将基点顺序与 key 长度混淆了。

方法如下Bouncy Castle code执行 ECDSA 数字签名验证。

private BigInteger calculateE(BigInteger n, byte[] message)
{
/* n is curve order value */
int log2n = n.bitLength();
/* and message is a hash */
int messageBitLength = message.length * 8;

BigInteger e = new BigInteger(1, message);
/* If message is longer than curve order */
if (log2n < messageBitLength)
{
/* only log2n bits are taken from the left */
e = e.shiftRight(messageBitLength - log2n);
}
return e;
}

关于java - 如何在 ECDSA 中处理具有较长基点顺序的短哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20268653/

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