文件做MD5校验

来源:互联网 发布:淘宝客服招聘文案 编辑:程序博客网 时间:2024/05/18 03:07

为了防止文件被篡改,大多数比计算MD5数据进行对比:

/**
 * 类名 :Md5CheckFile 功能描述 :对比本地计算文件的md5与服务器计算是否一致 :
 */
public class Md5CheckFile {
    
    
    /**
     * 函数名 :CheckMd5Value 功能描述 :对比本地计算文件的md5与服务器计算是否一致 输入参数 : (1) 本地需要计算文件的路径
     * (2) 服务器对该文件计算得到的md5 返回值 : boolean 异 常
     */
    public static boolean CheckMd5Value(String packagePath, String crc) {
        InputStream signedData = null;
        try {
            PLog.e("MD5", "server ori zip md5 is" + crc);
            MessageDigest sig = MessageDigest.getInstance("MD5");
            File packageFile = new File(packagePath);
            signedData = new FileInputStream(packageFile);
            byte[] buffer = new byte[4096];// 每次检验的文件区大小
            long toRead = packageFile.length();
            long soFar = 0;
            boolean interrupted = false;
            while (soFar < toRead) {
                interrupted = Thread.interrupted();
                if (interrupted)
                    break;
                int read = signedData.read(buffer);
                soFar += read;
                sig.update(buffer, 0, read);
            }
            byte[] digest = sig.digest();
            String digestStr = bytesToHexString(digest);// 将得到的MD5值进行移位转换
            PLog.e("MD5", "local zip md5 is" + digestStr);
            digestStr = digestStr.toLowerCase();
            crc = crc.toLowerCase();
            if (digestStr.equals(crc)) {// 比较两个文件的MD5值,如果一样则返回true
                return true;
            }

        } catch (Exception e) {
            return false;
        } finally {
            if (signedData != null) {
                try {
                    signedData.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return false;
    }

    /**
     * 函数名 :bytesToHexString 功能描述 : byte数组转成String 输入参数 : (1) 数组 返回值 : string 异
     * 常 :无
     */
    public static String bytesToHexString(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0) {
            return null;
        }
        int i = 0;
        while (i < src.length) {
            int v;
            String hv;
            v = (src[i] >> 4) & 0x0F;
            hv = Integer.toHexString(v);
            stringBuilder.append(hv);
            v = src[i] & 0x0F;
            hv = Integer.toHexString(v);
            stringBuilder.append(hv);
            i++;
        }
        return stringBuilder.toString();
    }

}

原创粉丝点击