带SHA1withRSA的Java数字签名

时间:2017-06-21 21:56:47

标签: java cryptography rsa digital-signature

我正在尝试将数字签名应用于.txt文件。数字签名已成功应用,但每当我尝试验证它时,我都会显示已验证:false。 这是我的签名代码:

public void signData(){
   Signature rsa = Signature.getInstance("SHA1withRSA");
   rsa.initSign(privateKey);
   File f= new File(path);

//read from file
  FileInputStream fis = new FileInputStream(f);
  byte[] buffer = new byte[(int) f.length()];
  fis.read(buffer);
  fis.close();
  rsa.update(buffer);
//write to file
  byte[] toWrite=rsa.sign();
  String signPath;
  signPath="Signed-"+f.getName();
  File output=new File(signPath);
  FileOutputStream fos = new FileOutputStream(output);
  fos.write(toWrite);
  fos.flush();
  fos.close();
  System.out.printf("File: %s is now signed in: %s\n\n",path,signPath);
}

阅读和验证:

public void verify(){
  Signature sig = Signature.getInstance("SHA1withRSA");
  sig.initVerify(publicKey);
  File f= new File(path);
  FileInputStream fis = new FileInputStream(f);
  byte[] buffer = new byte[(int) f.length()];
  fis.read(buffer);
  fis.close();
  sig.update(buffer);
  System.out.println("Verified: "+sig.verify(buffer));
}

没有显示错误。使用的KeyPair算法是“RSA”。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

要进行签名,您需要输入私钥和要签名的数据。输出是签名。

为了验证,您有输入公钥和签名数据(实际上它是从第一步开始签名的数据)。您将签名作为输入丢失。它应该是这样的:

sig.update(signedData);
System.out.println("Verified: "+sig.verify(signature));

不要忘记阅读文件中的签名。