代码之家  ›  专栏  ›  技术社区  ›  Iker Jimenez

如何在Java中获取文件的md5sum?

  •  0
  • Iker Jimenez  · 技术社区  · 14 年前

    我有一个文件,每次更改时都需要在应用程序中重新加载。

    我正在检查它的最新修改,我也想在处理它之前检查它的md5sum。

    我正在使用Spring框架,以防其中有有用的东西。

    检查这个最好的方法是什么?有什么例子/库需要我检查吗?

    谢谢。

    5 回复  |  直到 14 年前
        1
  •  2
  •   Ahmed Kotb    14 年前

    本文中的解释和代码片段 link 也许能帮你

    仅就记录而言,在大多数使用bigInteger的代码片段中都存在一个常见问题,bigInteger类会删除字符串开头的额外零,因此您可能希望添加这样的检查

        String res =new BigInteger(1,m.digest()).toString(16);
        if (res.length() == 31)
              res = "0" + res;
    
        2
  •  1
  •   Sigman    14 年前
        InputStream in = new FileInputStream(filename);
    
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] buffer = new byte[1024];
    
        while (true)
        {
            int c = in.read(buffer);
    
            if (c > 0)
                md5.update(buffer, 0, c);
            else if (c < 0)
                break;
        }
    
        in.close();
    
        byte[] result = md5.digest();
    
        3
  •  0
  •   Matthew    14 年前

    您必须读取整个文件并将其馈送到 MessageDigest .

        4
  •  0
  •   Kevin    14 年前

    您可以使用Java内置函数来实现:

    MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
    digest.update(...your data here...);
    byte[] hash = digest.digest();
    

    或者尝试其他实现 here ,当然更快(根据它的名字:)

    编辑:

    他们似乎提供文件md5sum,正是你想要的!

    你想要额外的方便方法 对于散列文件。。。

    String hash = MD5.asHex(MD5.getHash(new File(filename)));
    
        5
  •  0
  •   cb0    14 年前

    使用 MessageDigest 同学们,你可以找到一个很好的例子 here .