如何计算文件的SHA512?

问题描述 投票:1回答:3

我有一个文件,我需要为其计算SHA512值。我发现有很多网站可以为我做这件事,但是我想用Java以编程方式来做(嗯,Groovy,但是是同一回事)。

[出于好奇,我正在运行Oracle的TZUpdater工具,并将其指向本地文件。这需要一个包含该文件的SHA512值的文件。http://www.oracle.com/technetwork/java/javase/tzupdater-readme-136440.html

java hash groovy sha512
3个回答
5
投票

如果第三方库是公平的游戏,那么番石榴的Files.hash可以使这个变得简单

Files.hash

...这也可能更有效率;如果文件很大,则不需要像Files.hash(new File(fileName), Hashing.sha512()).toString(); 解决方案一样一次将其存储在内存中。这还将以十六进制输出适当的哈希值;如果需要以字节为单位,则只需使用Files.readAllBytes而不是asBytes()


5
投票

您可以使用此代码段来计算文件的SHA-512摘要:

toString()

要使此代码正常工作,您将需要JDK7或更高版本。

注意:如果文件太大而不能容纳在内存中,则建议按照建议使用Guava。


0
投票

最简单的解决方案,没有外部库,大文件没有问题:

MessageDigest.getInstance("SHA-512").digest(Files.readAllBytes(Paths.get("/path/file.txt")))

源代码:public static String hashFile(File file) throws NoSuchAlgorithmException, FileNotFoundException, IOException { // Set your algorithm // "MD2","MD5","SHA","SHA-1","SHA-256","SHA-384","SHA-512" MessageDigest md = MessageDigest.getInstance("SHA-512"); FileInputStream fis = new FileInputStream(file); byte[] dataBytes = new byte[1024]; int nread = 0; while ((nread = fis.read(dataBytes)) != -1) { md.update(dataBytes, 0, nread); } byte[] mdbytes = md.digest(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < mdbytes.length; i++) { sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1)); } return sb.toString(); }

© www.soinside.com 2019 - 2024. All rights reserved.