2

I have problem with DSA signature. My DSA code:

public byte[] signing(String text, PrivateKey privatekey) throws Exception {
    byte[] textByte = text.getBytes();
    Signature sign = Signature.getInstance("DSA");
    sign.initSign(privatekey);
    sign.update(textByte);
    return sign.sign();
}

public boolean verify(String text, byte[] signature, PublicKey publickey) throws Exception {
    byte[] textByte = text.getBytes();
    Signature sign = Signature.getInstance("DSA");
    sign.initVerify(publickey);
    sign.update(textByte);  
    return sign.verify(signature);
}

And I run it on button action:

private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String message = jTextArea1.getText();
    try {
        signed = dsa.signing(message, privKey);
    } catch (Exception ex) {
        Logger.getLogger(DSAFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
    String signedString = new String(signed);
    jTextArea2.setText(signedString);
}

private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {                                          
    String signedString = jTextArea1.getText();
    signToVer = jTextArea2.getText().getBytes();
    try {
        boolean correct = dsa.verify(signedString, signToVer, pubKey);
        if(correct == true) {
            JOptionPane.showMessageDialog(this, "Podpis poprawny", "Sukces", JOptionPane.INFORMATION_MESSAGE);
        } else {
            JOptionPane.showMessageDialog(this, "Podpis niepoprawny", "Błąd", JOptionPane.ERROR_MESSAGE);
        }
    } catch (Exception ex) {
        Logger.getLogger(DSAFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
}  

When I want verify signature, it throw me an java.security.SignatureException: invalid encoding for signature. I think, it's a problem with conversion string to byte array and back. But I don't know how to make it work.

user2374593
  • 125
  • 2
  • 8

0 Answers0