JAVA获取MD5的正确方式

作者: 聪葱忙忘 | 来源:发表于2020-06-03 10:29 被阅读0次

    因为项目原因,发现同事写的代码获取的MD5值少了一位。MD5是32个数字的,然后...

    百度搜索出来的文章前面几个获取MD5的方法都存在一个问.题

    md5字符串最前面的数字是0的,转成字符串后会省略。
    然后我搜“android获取MD5值”出来的第一篇文章也有同样问题。可能运气问题,这MD5值第一位不一定为0,也就没人发现这个问题了。

    正确姿势

    我直接上代码了

     public static String getFileMD5(File file) {
            if (!file.isFile())
                return null;
            InputStream fis = null;
            try {
                fis = new FileInputStream(file);
    
                byte[] buffer = new byte[1024];
                MessageDigest complete = MessageDigest.getInstance("MD5");
                int numRead;
                do {
                    numRead = fis.read(buffer);
                    if (numRead > 0) {
                        complete.update(buffer, 0, numRead);
                    }
                } while (numRead != -1);
                fis.close();
                byte[] b = complete.digest();
                StringBuilder result = new StringBuilder();
                for (byte value : b) {
                    result.append(Integer.toString((value & 0xff) + 0x100, 16).substring(1));
                }
                return result.toString();
            } catch (NoSuchAlgorithmException | IOException e) {
                e.printStackTrace();
            }finally {
                if(fis !=null){
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }
    

    相关文章

      网友评论

        本文标题:JAVA获取MD5的正确方式

        本文链接:https://www.haomeiwen.com/subject/fmjvzhtx.html