现在的位置: 首页 > 编程技术 > Java > 正文

Java中计算字符串以及文件的hash值

2015年11月12日 Java ⁄ 共 1007字 ⁄ 字号 Java中计算字符串以及文件的hash值已关闭评论 ⁄ 阅读 967 次

Android开发中常常会使用到hash值,字符串的hash用的比较多,一般用于字段、存储的key等等,文件的hash一般用于校验文件的正确性。
计算字符串的hash值,网上也有其他的计算方法,这里给出一个相对简洁的方法:

public static String md5(String origin) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(origin.getBytes("UTF-8"));
        BigInteger bi = new BigInteger(1, md.digest());

        return bi.toString(16);
    } catch (Exception e) {
        return "";
    }
}

注意要把字符串用utf-8的方式获取byte,否则会导致不用语言之间得出的结果不一样(比如php或go)。

计算文件的hash值略麻烦一点:

public static String fileHash(String filePath) {
    File file = new File(filePath);
    if (file == null || !file.exists()) {
        return NULL;
    }

    String result = NULL;
    FileInputStream fis = null;

    try {
        fis = new FileInputStream(file);
        MappedByteBuffer mbf = fis.getChannel().map(
                FileChannel.MapMode.READ_ONLY, 0, file.length());
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(mbf);
        BigInteger bi = new BigInteger(1, md.digest());
        result = bi.toString(16);
    } catch (Exception e) {
        return NULL;
    } finally {
        if (fis != null) {
            try {
                fis.close();
            } catch (IOException e) {
                /* ignore */
            }
        }
    }

    return result;
}

如果文件较大,这个计算过程可能会比较长。

sha1和sha256的计算方法就很类似了,只需要将MessageDigest.getInstance("MD5")换一下就可以用了。

抱歉!评论已关闭.