关于MD5校验和java工程下的校验
File file = new File("cos_code2003.bin");
System.out.println(file.length());
byte[] data = new byte[(int) file.length()];
if (file.exists()) {
FileInputStream fis;
try {
fis = new FileInputStream(file);
fis.read(data);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{
System.out.println("wenjian buzun");
} String a = computeMd5(data);
System.out.println(a);
} private static String computeMd5(byte[] origin) {
byte[] ret = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
ret = md5.digest(origin); StringBuilder hexString = new StringBuilder();
for (int i = 0; i < ret.length; i++) {
String h = Integer.toHexString(0xFF & ret[i]);
while (h.length() < 2) {
h = "0" + h;
}
hexString.append(h);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} return "AV";
}
md5校验不难,就是知道一个MessageDigest类,获取实例,直接调用digest方法就可以了。不过校验后得到的是一个数量为16的byte数组,要转换成一个32位的16进制校验和,还需要作一下转换,注意这里用了一个StringBuilder类,把字节和0XFF进行与操作就可以了。另外注意的是当字节数少于16的时候要加一个前缀0,这里用的表示法是h.length,其它也有一些表示如0X10,其实是一样的。最后转成string就可以了。
另外注意这里的File文件的构造函数里面的文件名的写法file,这里应该是java工程根目录下的文件名,而不是和代码在一个地方的文件名。
上面的md5校验在计算超过2GB的大文件就会有问题,因为一个Int数组的最大只有2GB,2的31次方,否则内存会撑不住。
这里再给出一个方法,
private static String checkMd5(File f) { FileInputStream fis = null;
byte[] rb = null;
DigestInputStream digestInputStream = null;
try {
fis = new FileInputStream(f);
MessageDigest md5 = MessageDigest.getInstance("md5");
digestInputStream = new DigestInputStream(fis,
md5);
byte[] buffer = new byte[];
while (digestInputStream.read(buffer) > )
;
md5 = digestInputStream.getMessageDigest();
rb = md5.digest();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}finally{
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
} StringBuilder sb = new StringBuilder();
for (int i = ; i < rb.length; i++) {
String a = Integer.toHexString(0XFF & rb[i]);
if (a.length() < ) {
a = '' + a;
}
sb.append(a);
}
return sb.toString();
}
这个方法,经测试2.7GB文件的MD5没有出错。
关于MD5校验和java工程下的校验的更多相关文章
- Eclipse IDE 添加jar包到Java工程中
操作系统:Windows 10 x64 工具1:Eclipse Java EE IDE for Web Developers. Version: Photon Release (4.8.0) 在Pac ...
- Log4j在Java工程中使用方法
Eclipse新建Java工程,工程目录如下 1.下载log4j的Jar包,在Java工程下新建lib文件夹,将jar包拷贝到此文件夹,并将其加入到路径中,即:Jar包上右键——Build Path— ...
- 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序
如何用javac 和java 编译运行整个Java工程 (转载) http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...
- Intellij IDEA下导出Java工程的可运行JAR包
Intellij IDEA下导出Java工程的可运行JAR包 昨天一直向导出一个Java工程的可运行JAR包,然后查阅网上的资料以及自己一遍一遍的尝试,均以失败告终.可以导出JAR包,但是导出的JAR ...
- ubuntu命令行下java工程编辑与算法(第四版)环境配置
ubuntu命令行下java工程编辑与算法(第四版)环境配置 java 命令行 javac java 在学习算法(第四版)中的实例时,因需要安装配套的java编译环境,可是在编译java文件的时候总是 ...
- Java-Maven(五):Eclipse&Maven下创建java工程&web工程
本章文章主要学习集成了maven插件的eclipse下,创建java project和web project的步骤. 创建java工程 第一步:使用使用maven project来创建java pr ...
- 递归实现列出当前工程下所有.Java文件
package com.lanxi.demo2_3; import java.io.File; import java.util.ArrayList; import java.util.List; / ...
- Eclipse下的java工程目录
对新手来讲,一个Java工程内部的多个文件夹经常会让大家困惑.更可恶的是莫名其妙的路径问题,在Eclipse编写Java程序中,出现频率最高的错误很可能就是路径问题. 这些问题原因其实都是一个,就是关 ...
- MD5介绍及Windows下对文件做md5校验。
MD5介绍参考百度百科: 摘要如下: MD5 校验和(checksum)通过对接收的传输数据执行散列运算来检查数据的正确性. 一个散列函数,比如 MD5,是一个将任意长度的数据字符串转化成短的固定长度 ...
随机推荐
- Apache搭建多个站点
如何用Apache搭建的网站系统上运行多个站点呢?最平常的大概有3种方法. 第一种:单IP不同端口 第二种:多IP同端口(独立IP的虚拟空间) 第三种:域名绑定根目录的方式(共享IP的虚拟空间) 下面 ...
- (转载)腾讯CMEM的PHP扩展
(转载)http://blog.renren.com/share/223341289/7693783476 题外话 最近公司在做相关的业务,由于Memcached协议缺少返回码,为了保证业务数据的安全 ...
- MongoDB之二(增删查改)
一: Insert操作 上一篇也说过,文档是采用“K-V”格式存储的,如果大家对JSON比较熟悉的话,我相信学mongodb是手到擒来,我们知道JSON里面Value 可能是“字符串”,可能是“数组” ...
- CodeForces 370A Rook, Bishop and King
此题看似很简单,但实际上有不少细节,WA点不少.分情况处理即可. #include<cmath> #include<cstdio> #include<string> ...
- JSP-讲解(生成java类、静态导入与动态导入)
一.JSP技术简介 JSP是Java Server Page的缩写,它是Servlet的扩展,它的作用是简化网站的创建和维护. JSP是HTML代码与Java代码的混合体. JSP文件通常以JSP或J ...
- (转载)JDK中的设计模式
写的很好,学习道路更轻松一些 原文地址:http://blog.csdn.net/gtuu0123/article/details/6114197 JDK中设计模式 分类: Java相关 设计模式 2 ...
- nyoj10 滑雪
dp[ i][j]=max(四个方向点)+1: 四个方向上的点应该存在,且大于i,j,表示以i,j开始的点最长路径,递归的结束条件不用判断,因为 dp[][]最大数位置肯定 直接结束,随后次大值肯定能 ...
- HW2.3
import java.util.Scanner; public class Solution { public static void main(String[] args) { final dou ...
- CF_216_Div_2
比赛链接:http://codeforces.com/contest/369 369C - Valera and Elections: 这是一个树上问题,用深搜,最开始贪心想得是只加叶子节点,找到一个 ...
- 如何解决Python脚本在Linux和Windows上的格式问题
python是一种对缩进有严格要求的语言, Python脚本可以使用非常多的工具进行编写,笔者在Linux系统使用JEdit进行Python脚本编写,由于在Linux编写脚本比较痛苦,比如想一眼看出相 ...