版本差异对比(二) -- 文件的MD5算法
来源:互联网 发布:ssh连接阿里云服务器 编辑:程序博客网 时间:2024/05/29 07:56
java中为比较文件差异,提供了 MessageDigest 类,通过计算出文件的 MD5 值检测文件是否被修改。
java.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。关于信息摘要和散列码请参照《数字证书简介》
MessageDigest通过其getInstance系列静态函数来进行实例化和初始化。MessageDigest 对象通过使用 update 方法处理数据。任何时候都可以调用 reset 方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用 digest 方法之一完成哈希计算并返回结果。
对于给定数量的更新数据,digest方法只能被调用一次。digest 方法被调用后,MessageDigest 对象被重新设置成其初始状态。
MessageDigest 类计算文件 MD5 有以下特性:
1.只能检测具体文件或压缩包,不能直接检测文件夹。
2.如果压缩包最外层包名被修改或要被检测的文件文件名被修改,但文件并无改动,那么他们生成的 MD5 值相同。
3.压缩包内的文件名被修改,文件无改动,最外层压缩包生成的 MD5 值依旧会改变。
4.文件的 MD5 与其原始解压或压缩路径有关。如果两份相同的文件分别存在于 test1、test2 文件夹,分别将他们压缩,得到的MD5值不一样。
实例:
/** * 获取单个文件的MD5值! * * @param file * @return */ public static String getFileMD5(File file) { if (!file.isFile()) { return null; } MessageDigest digest = null; FileInputStream in = null; byte buffer[] = new byte[1024]; int len; try { digest = MessageDigest.getInstance("MD5"); in = new FileInputStream(file); while ((len = in.read(buffer, 0, 1024)) != -1) { digest.update(buffer, 0, len); } in.close(); } catch (Exception e) { e.printStackTrace(); return null; } BigInteger bigInt = new BigInteger(1, digest.digest()); return bigInt.toString(16); } /** * 获取文本的MD5值! * * @param file * @return */ public static String getStringMD5(String content) { MessageDigest digest = null; try { digest = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("Can not create md5 digest object.", e); } digest.update(content.getBytes()); BigInteger bigInt = new BigInteger(1, digest.digest()); return bigInt.toString(16); }
阅读全文
0 0
- 版本差异对比(二) -- 文件的MD5算法
- 版本差异对比(四)-- 计算压缩文件夹及文件的MD5值
- 版本差异对比(五)-- 以JSON格式持久化文件MD5值至磁盘
- 对比文件MD5差异并保存
- 两个csv文件差异对比(方法二)
- 版本差异对比 -- 前言(一)
- <SVN>使用SVN小乌龟对比单个文件任意版本的差异
- 版本差异对比(三) -- 文件迭代压缩与解压缩
- MD5算法(二)
- BCB 版本的MD5算法
- 文件内容差异对比
- 版本差异对比(六) -- 比较规则定义
- SVN导出版本差异的文件
- 求文件的MD5算法
- Java 日志文件差异对比
- 用Python xlrd对比两个Excel文件的差异diff
- beyond compare 解决文件一样,对比有差异的问题
- emacs中对比文件差异的工具—ediff
- Collections常用的方法总结
- sqluldr2 报错ora-24345: A Truncation or null fetch error occurred
- 散列集(HashSet)、映射
- windows下-phpstrom下搜狗输入法光标不一致的解决方案
- Jackson进行JSON解析和序列化
- 版本差异对比(二) -- 文件的MD5算法
- 传统接口写法与Restful API 区别
- ElasticSearch(四)
- windows nginx启动bat命令,配置一些就可以直接双击控制
- 使用Linux的环境变量
- SSH 连接 Linux 服务 报错 server responded algorithm negotition
- jQuery实现Checkbox全选功能
- 线程同步问题
- 3342 数据结构实验之二叉树三:统计叶子数