java - 验证签名,验证返回false

标签 java dsa

我搜索了论坛和答案,但我无法弄清楚我的问题,我正在尝试验证签名,但它总是返回 false,我做错了什么吗?我生成 key ,对其进行签名,然后验证它(字节数组不为空)

public void Keygen()  throws java.rmi.RemoteException, NoSuchAlgorithmException, IOException, SignatureException, NoSuchProviderException, InvalidKeyException {
    KeyPairGenerator Keygen = KeyPairGenerator.getInstance("DSA");
    Keygen.initialize(1024, random);

    KeyPair pair = Keygen.generateKeyPair();
    priv = pair.getPrivate();
    pub = pair.getPublic(); 
}

public byte [] sign (int k)throws java.rmi.RemoteException, NoSuchAlgorithmException, SignatureException, InvalidKeyException , NoSuchProviderException
    Signature dsa = Signature.getInstance("SHA1withDSA", "SUN"); 
    dsa.initSign(priv);
    String data = "aa";
    byte[] b = data.getBytes();
    dsa.update(b);
    realSig = dsa.sign();        
    key = pub.getEncoded();
    return realSig;     
}

public int Versig(byte [] sigkeys)  throws java.rmi.RemoteException, NoSuchAlgorithmException, IOException, SignatureException, NoSuchProviderException, InvalidKeyException, InvalidKeySpecException{
    byte [] pkb = getenckey();

    KeyFactory kf = KeyFactory.getInstance("DSA");
    PublicKey pubKey = kf.generatePublic(new X509EncodedKeySpec(pkb));              

    /* create a Signature object and initialize it with the public key */
    Signature sig = Signature.getInstance("SHA1withDSA", "SUN");
    sig.initVerify(pubKey);

    String data2 = "bb";
    byte[] c = data2.getBytes();
    sig.update(c);

    boolean verifies = sig.verify(sigkeys);
    System.out.println("1  " + verifies);
    if (verifies == true) {
        System.out.println(" 2 " + verifies);
        return (1);
    } else {
        return (2);
    }

最佳答案

您在验证 String data2 = "bb"; 时在 Sign 方法中签署 String data = "aa";,因此签名验证将返回 false。

对数据进行数字签名以检查其完整性(这意味着不会更改数据)。

希望这能有所帮助!

关于java - 验证签名,验证返回false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27358698/

相关文章:

java - 何时以及如何在 Java 中使用 "return this"

Java SHA1withDSA 到 PHP,可转换吗?

java - 使用 RSA 公钥加密 DSA 私钥

c++ - Openssl DSA 标志

java - 在 hibernate session 中禁用过滤器

java - Maven 替换插件找不到文件

java - 如何实现 jquery/javascript 通知并从数据库中计数?

java - 从代码中删除了 package 行并出现错误 "Could not find or load main class"

php - 有人可以告诉我 openssl_sign 示例有什么问题吗

c - 使用 OpenSSL 进行 DSA 签名