验证两个文件的md5值是否一样

来源:互联网 发布:seed网络加速器官网 编辑:程序博客网 时间:2024/05/18 02:57

1. 得到文件的MD5值并比较与原来的MD5值是否一样

public static boolean verifyInstallPackage(String packagePath,String crc) {    
          try {
          MessageDigest sig = MessageDigest.getInstance("MD5");
             File packageFile = new File(packagePath);
             InputStream 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值进行移位转换
             digestStr = digestStr.toLowerCase();
             crc = crc.toLowerCase();
             if (digestStr.equals(crc)) {//比较两个文件的MD5值,如果一样则返回true
                 return true;
             }
   
  } catch (Exception e) {
   // TODO: handle exception
   return false;
  }
        return false;
    }

2 bytesToHexString MD5值移位转换

 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();
    }

0 0