java为什么我的EC DSA代码返回false进行验证?
我正在使用java。安全性库做一个椭圆曲线数字签名。 我没有得到语法错误或任何异常错误
该代码基本上创建了公钥和私钥。然后,我通过创建一个字符串的签名来测试它,并使用相同的字符串进行验证。然而,结果是错误的,但它应该是正确的
我不知道我错在哪里。任何反馈都将不胜感激
守则如下:
import java.security.*;
import java.security.spec.ECGenParameterSpec;
public class ECTests {
static PrivateKey privatekey;
static PublicKey publickey;
public static void main(String[] args) throws Exception {
generateKeyPair();
String strTest = "Hello World! This is a test";
byte[] sign = generateSignature(privatekey, strTest.getBytes());
boolean isSignValid = verifySignature(publickey, strTest.getBytes(), sign);
System.out.println(isSignValid);
}
public static KeyPair generateKeyPair() throws GeneralSecurityException {
KeyPairGenerator keyPair = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec ec = new ECGenParameterSpec("secp256r1");
keyPair.initialize(ec, new SecureRandom());
privatekey = keyPair.genKeyPair().getPrivate();
publickey = keyPair.genKeyPair().getPublic();
return keyPair.generateKeyPair();
}
public static byte[] generateSignature(PrivateKey ecPrivate, byte[] input) throws GeneralSecurityException {
Signature signature = Signature.getInstance("SHA256withECDSA");
signature.initSign(ecPrivate, new SecureRandom());
signature.update(input);
return signature.sign();
}
public static boolean verifySignature(PublicKey ecPublic, byte[] input, byte[] encSignature) throws GeneralSecurityException {
Signature signature = Signature.getInstance("SHA256withECDSA");
signature.initVerify(ecPublic);
signature.update(input);
boolean state = signature.verify(encSignature);
return state;
}
}
共 (0) 个答案