比较两个文件是否相同(计算MD5效验码比较方式)

MD5文件效验码是一个判断文件是否是相同文件的途径,通过比较两个文件的Md5效验码是否相同来精确判断两个文件是否相同

 

Java代码实现

 

public class MD5Check {



    /**

     * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合

     */

    protected char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    protected  MessageDigest messagedigest = null;

    

    {

        try {

            messagedigest = MessageDigest.getInstance("MD5");

        } catch (NoSuchAlgorithmException e) {

            e.printStackTrace();

        }

    }



    public String getFileMD5String(File file) throws IOException {

        InputStream fis;

        fis = new FileInputStream(file);

        byte[] buffer = new byte[1024];

        int numRead = 0;

        while ((numRead = fis.read(buffer)) > 0) {

            messagedigest.update(buffer, 0, numRead);

        }

        fis.close();

        return bufferToHex(messagedigest.digest());

    }

    

    public String getFileMD5String(InputStream in) throws IOException {

        byte[] buffer = new byte[1024];

        int numRead = 0;

        while ((numRead = in.read(buffer)) > 0) {

            messagedigest.update(buffer, 0, numRead);

        }

        in.close();

        return bufferToHex(messagedigest.digest());

    }



    private String bufferToHex(byte bytes[]) {

        return bufferToHex(bytes, 0, bytes.length);

    }



    private String bufferToHex(byte bytes[], int m, int n) {

        StringBuffer stringbuffer = new StringBuffer(2 * n);

        int k = m + n;

        for (int l = m; l < k; l++) {

            appendHexPair(bytes[l], stringbuffer);

        }

        return stringbuffer.toString();

    }



    private void appendHexPair(byte bt, StringBuffer stringbuffer) {

        char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换

        // 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同

        char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换

        stringbuffer.append(c0);

        stringbuffer.append(c1);

    }



}

 

 

 

 

 

你可能感兴趣的:(MD5)