如何在Java中一致生成正确的SHA-384哈希字符串

时间:2018-11-21 14:23:56

标签: java spring-mvc spring-boot security hashcode

我正在尝试生成文件,然后对它们的内容进行哈希处理,并将该哈希值附加在文件内容的末尾。对于我使用的是SHA-384,我的哈希函数代码粘贴在下面。问题在于生成正确的哈希字符串时不一致,因此哈希和文件内容最终对某些文件无效(不匹配),而对其他文件有效。有什么我可以解决的吗?我正在使用第三方应用程序读取和验证文件,因此很遗憾,我无法获得其解码功能。

public static String hash384(byte[] inputBytes) throws Exception{
        try {
            Runtime.getRuntime().gc();
            String hash;
            MessageDigest messageDigest = MessageDigest.getInstance("SHA-384");
            messageDigest.update(inputBytes);
            byte[] digestedBytes = messageDigest.digest();
            hash = new String(digestedBytes, "windows-1251");
            return hash;
        } catch(Exception e) {
            e.printStackTrace();
        }
        return null;
    }

1 个答案:

答案 0 :(得分:1)

我建议使用Apache commons-codec模块中的DigestUtils,以便实际上可以编写两行代码:

import static org.apache.commons.codec.digest.MessageDigestAlgorithms.SHA_384;
...
// digest
byte[] digest = new DigestUtils(SHA_384).digest(new File(<file path>));
// hex digest
String hdigest = new DigestUtils(SHA_384).digestAsHex(new File(<file path>));