如何计算文件的SHA512



我有一个文件,我需要为它计算SHA512值。我发现很多网站都可以为我做这件事,但我想用Java编程来做(好吧,Groovy,但这是一样的)。

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

如果第三方库是公平的游戏,那么Guava的Files.hash可以使其变得像

一样简单
Files.hash(new File(fileName), Hashing.sha512()).toString();

…这也可能更有效率;如果文件很大,则不需要像Files.readAllBytes解决方案那样一次性将其存储在内存中。这也将输出一个正确的十六进制哈希值;如果您需要以字节为单位,请使用asBytes()代替toString()

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

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

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

注意:如果文件太大而不适合内存,您可能应该按照建议使用Guava。

您也可以使用Apache Commons Codec.

Maven Repository: https://mvnrepository.com/artifact/commons-codec/commons-codec

代码示例:

public static String calcSha512Hex(File file) throws FileNotFoundException, IOException {
    return org.apache.commons.codec.digest.DigestUtils.sha512Hex(new FileInputStream(file));
}

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

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();
}

src: https://www.quora.com/how - -我得到- - sha - 256的散列值- - -文件的java

最新更新