文件做MD5校验

xiaoxiao2021-02-27  216

为了防止文件被篡改,大多数比计算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();     } }

转载请注明原文地址: https://www.6miu.com/read-10899.html

最新回复(0)