gpt4 book ai didi

java 证书验证在不同方法上为 false,但在同一类中的相同方法上为 true

转载 作者:太空宇宙 更新时间:2023-11-04 10:10:30 24 4
gpt4 key购买 nike

需要帮助我正在测试数字签名,因此我传递数据并返回签名字段。当我从相同的方法验证数字签名时,它是正确的,但在同一类的不同方法中是错误的

方法一:

public byte[] DigitalSignfield(String data) throws Exception, NoSuchAlgorithmException {

DigitalSignature ac = new DigitalSignature();
Signature signature = Signature.getInstance("SHA1withRSA");
signature.initSign(ac.getPrivate("KeyPair/privateKey"));
signature.update(data.getBytes("UTF8"));
byte[] signatureValue = signature.sign();

signature.initVerify(ac.getPublic("KeyPair/publicKey"));
signature.update(data.getBytes("UTF8"));
System.out.println("verified start start ");
System.out.println(signature.verify(signatureValue));
System.out.println("verified end end ");

return signatureValue;

}

返回 true

当上面的signatureValue返回并传递给同一个类中的下面的方法时,它返回false

public Boolean VerifyDigital(byte[] data) throws Exception, NoSuchAlgorithmException {

DigitalSignature ac = new DigitalSignature();
Signature signature = Signature.getInstance("SHA1withRSA");
signature.initVerify(ac.getPublic("KeyPair/publicKey"));
signature.update(data);
Boolean ok = signature.verify(data);
return ok;
}

谢谢

最佳答案

在第二种方法中,您使用签名数据调用 update,而不是已签名的数据(在另一个方法中名为 data)。您还需要将原始数据传递给第二种方法,例如像这样:

public Boolean VerifyDigital(String data, byte[] sigData) throws Exception, NoSuchAlgorithmException {

DigitalSignature ac = new DigitalSignature();
Signature signature = Signature.getInstance("SHA1withRSA");
signature.initVerify(ac.getPublic("KeyPair/publicKey"));
signature.update(data.getBytes("UTF-8"));
Boolean ok = signature.verify(sigData);
return ok;
}

顺便说一句:您不应将要签名的数据作为 String 传递,而应将其作为 byte[] 传递,以使方法更加通用并允许对二进制数据进行签名。

关于java 证书验证在不同方法上为 false,但在同一类中的相同方法上为 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52408865/

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