Java簽名和摘要是Java安全機制中的兩種重要機制。簽名能夠對代碼或者數據文件進行數字簽名,證明其來自于可信賴的源頭;而摘要則是一種哈希算法,可以對數據進行唯一性鑒別和完整性驗證。
//使用Java簽名進行文件數字簽名 Signature signature = Signature.getInstance("SHA1withRSA"); PrivateKey privateKey = getPrivateKeyFromKeyStore(); signature.initSign(privateKey); Path path = Paths.get("test.txt"); byte[] data = Files.readAllBytes(path.toAbsolutePath()); signature.update(data); byte[] sign = signature.sign();
上述代碼中的Signature類是Java提供的數字簽名類,使用getInstance方法可以獲取對應的簽名算法實例,比如SHA1withRSA算法,需要先獲取私鑰,并通過Signature類的initSign方法初始化簽名實例。接著,讀入文件內容,并通過update方法將數據傳入簽名實例中。最后,通過sign方法進行簽名,得到簽名結果。
//使用Java摘要算法進行數據校驗 MessageDigest digest = MessageDigest.getInstance("SHA-256"); Path path = Paths.get("test.txt"); byte[] data = Files.readAllBytes(path.toAbsolutePath()); byte[] md5 = digest.digest(data); StringBuffer stringBuffer = new StringBuffer(); for(byte b: md5){ stringBuffer.append(String.format("%02x", b & 0xff)); } System.out.println("文件SHA-256摘要: " + stringBuffer.toString());
上述代碼中,MessageDigest類是Java提供的摘要算法類,使用getInstance方法可以獲取對應的哈希算法實例,比如SHA-256算法。然后,讀取文件內容,并通過MessageDigest類的digest方法進行數據校驗,得到摘要值。最后通過for循環和StringBuffer類把摘要值的字節數組轉換為字符串,輸出到控制臺。