Java簽名和摘要是Java安全機制中的兩種重要機制。簽名能夠?qū)Υa或者數(shù)據(jù)文件進行數(shù)字簽名,證明其來自于可信賴的源頭;而摘要則是一種哈希算法,可以對數(shù)據(jù)進行唯一性鑒別和完整性驗證。
//使用Java簽名進行文件數(shù)字簽名 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提供的數(shù)字簽名類,使用getInstance方法可以獲取對應的簽名算法實例,比如SHA1withRSA算法,需要先獲取私鑰,并通過Signature類的initSign方法初始化簽名實例。接著,讀入文件內(nèi)容,并通過update方法將數(shù)據(jù)傳入簽名實例中。最后,通過sign方法進行簽名,得到簽名結(jié)果。
//使用Java摘要算法進行數(shù)據(jù)校驗 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算法。然后,讀取文件內(nèi)容,并通過MessageDigest類的digest方法進行數(shù)據(jù)校驗,得到摘要值。最后通過for循環(huán)和StringBuffer類把摘要值的字節(jié)數(shù)組轉(zhuǎn)換為字符串,輸出到控制臺。