Java簽名的原理是:在Java代碼編譯后,通過Java密鑰工具(Java Keytool)生成私鑰和公鑰。使用私鑰進行簽名,并將簽名保存在META-INF目錄下的MANIFEST.MF文件中。其中,MANIFEST.MF文件是JAR包的一部分,用來存儲JAR文件的元數據信息和簽名。
Signature sig = Signature.getInstance("SHA1withDSA"); sig.initSign(privateKey); FileInputStream fis = new FileInputStream("myfile"); BufferedInputStream bufin = new BufferedInputStream(fis); byte[] buffer = new byte[1024]; int len; while ((len = bufin.read(buffer)) >= 0) { sig.update(buffer, 0, len); } bufin.close(); byte[] signature = sig.sign();
Java簽名的校驗分為兩個步驟:首先是驗證簽名本身的合法性,其次是校驗文件是否被篡改過。
Signature sig = Signature.getInstance("SHA1withDSA"); sig.initVerify(publicKey); FileInputStream fis = new FileInputStream("myfile"); BufferedInputStream bufin = new BufferedInputStream(fis); byte[] buffer = new byte[1024]; int len; while (bufin.available() != 0) { len = bufin.read(buffer); sig.update(buffer, 0, len); }; bufin.close(); boolean verifies = sig.verify(signature);
通過Java簽名,我們可以驗證軟件的來源和完整性,保障軟件的安全性。但是,Java簽名并不能完全防止軟件漏洞和攻擊,因此還需要其他的安全措施。
上一篇php json前綴