问题描述
我正在使用 java.security 库来进行椭圆曲线数字签名。 我没有收到语法错误或任何异常错误。
代码基本上创建了公钥和私钥。然后我通过创建一个字符串的签名来测试它,并使用相同的字符串进行验证。然而,结果是假的,但它应该是真的。
我不知道我哪里出错了。任何反馈表示赞赏。
代码如下:
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;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)