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类把摘要值的字节数组转换为字符串,输出到控制台。