-2
我試圖將數字簽名應用於.txt文件。數字簽名已成功應用,但每當我嘗試驗證它時,都會顯示已驗證:false。 這裏是我的簽名代碼:使用SHA1withRSA的Java數字簽名
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」。 預先感謝您。
您的文件閱讀完全錯誤。 – Kayaman
但是爲什麼?我使用相同的方法來加密和解密密碼和密鑰對,它的工作原理。 – Alb
因爲你寫錯了。打印出'fis.read(buffer)'的結果,看看你有多少讀。這可能不是你的代碼唯一的問題,但它是最明顯和最基本的問題。 – Kayaman