我不明白为什么下面的代码在检查自身时返回false
?
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.Signature;
import java.security.SignatureException;
import java.security.NoSuchProviderException;
import java.security.*;
public class HelloWorld
{
public static void main(String[] args)
{
KeyPair keyPair;
String data = "test";
try {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
keyPairGen.initialize(512);
keyPair = keyPairGen.genKeyPair();
Signature sign = Signature.getInstance("SHA1withDSA", "SUN");
sign.initSign(keyPair.getPrivate());
sign.update(data.getBytes());
byte[] encoded = sign.sign();
sign = Signature.getInstance("SHA1withDSA", "SUN");
sign.initVerify(keyPair.getPublic());
sign.update(encoded);
System.out.println("Checked: " + sign.verify(encoded)); // Testing with itself returns false????
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
} catch (SignatureException ex) {
ex.printStackTrace();
} catch (NoSuchProviderException ex) {
ex.printStackTrace();
} catch (InvalidKeyException ex) {
ex.printStackTrace();
}
}
}
私钥/公钥有问题? 我真的很困惑。
最佳答案
您更新了错误的内容,请更改此行
sign.update(encoded);
到此
sign.update(data.getBytes());
获得公钥后。
关于java - 签名 validator 在检查自身时返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600474/