我正在尝试将数字签名应用于.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”。 提前谢谢。
答案 0 :(得分:2)
要进行签名,您需要输入私钥和要签名的数据。输出是签名。
为了验证,您有输入公钥和签名数据(实际上它是从第一步开始签名的数据)。您将签名作为输入丢失。它应该是这样的:
sig.update(signedData);
System.out.println("Verified: "+sig.verify(signature));
不要忘记阅读文件中的签名。