有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案