代码实现:

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.security.MessageDigest;
  5. public class MD5Util {
  6. static char hexdigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
  7. /**
  8. * @funcion 对文件全文生成MD5摘要
  9. * @param file:要加密的文件
  10. * @return MD5摘要码
  11. */
  12. public static String getMD5(File file) {
  13. FileInputStream fis = null;
  14. try {
  15. MessageDigest md = MessageDigest.getInstance("MD5");
  16. fis = new FileInputStream(file);
  17. byte[] buffer = new byte[2048];
  18. int length = -1;
  19. while ((length = fis.read(buffer)) != -1) {
  20. md.update(buffer, 0, length);
  21. }
  22. byte[] b = md.digest();
  23. return byteToHexString(b);
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. return null;
  27. } finally {
  28. try {
  29. fis.close();
  30. } catch (IOException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. }
  35. /**
  36. * @function 把byte[]数组转换成十六进制字符串表示形式
  37. * @param tmp  要转换的byte[]
  38. * @return 十六进制字符串表示形式
  39. */
  40. private static String byteToHexString(byte[] tmp) {
  41. String s;
  42. // 用字节表示就是 16 个字节
  43. // 每个字节用 16 进制表示的话,使用两个字符,所以表示成 16 进制需要 32 个字符
  44. // 比如一个字节为01011011,用十六进制字符来表示就是“5b”
  45. char str[] = new char[16 * 2];
  46. int k = 0; // 表示转换结果中对应的字符位置
  47. for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节转换成 16 进制字符的转换
  48. byte byte0 = tmp[i]; // 取第 i 个字节
  49. str[k++] = hexdigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换, >>> 为逻辑右移,将符号位一起右移
  50. str[k++] = hexdigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
  51. }
  52. s = new String(str); // 换后的结果转换为字符串
  53. return s;
  54. }
  55. public static void main(String arg[]) {
  56. String a = getMD5(new File("e:/a.txt"));
  57. String b = getMD5(new File("e:/b.txt"));
  58. String c = getMD5(new File("e:/c.txt"));
  59. System.out.println("a.txt的摘要值为:" + a);
  60. System.out.println("b.txt的摘要值为:" + b);
  61. System.out.println("c.txt的摘要值为:" + c);
  62. if(a.equals(b)) {
  63. System.out.println("a.txt中的内容与b.txt中的内容一致");
  64. } else {
  65. System.out.println("a.txt中的内容与b.txt中的内容不一致");
  66. }
  67. if(a.equals(c)) {
  68. System.out.println("a.txt中的内容与c.txt中的内容一致");
  69. } else {
  70. System.out.println("a.txt中的内容与c.txt中的内容不一致");
  71. }
  72. }
  73. }

运行之前建立文件:

在E盘根目录下建立a.txt、b.txt和c.txt。

a.txt中的内容为“123456”。

b.txt中的内容为“123456”。

c.txt中的内容为“654321”。

运行结果:

a.txt的摘要值为:c4ca4238a0b923820dcc509a6f75849b

b.txt的摘要值为:e10adc3949ba59abbe56e057f20f883e

c.txt的摘要值为:c33367701511b4f6020ec61ded352059

a.txt中的内容与b.txt中的内容不一致

a.txt中的内容与c.txt中的内容不一致

结论:

从代码本身和运行结果都可以看出,MD5对文件的加密是加密文件中的内容,不管文件名是什么,相同的文件内容经过MD5算法处理后得到的摘要值也相同。

Java实现文件MD5加密的更多相关文章

  1. Java 语言实现 MD5 加密

    Java 语言实现 MD5 加密 背景说明 在实际项目中,为了安全性考虑,经常要求账号密码是以加密后的密文形式,保存到数据库中. 这样,即使有人获取到了数据库中的密文密码,也不知道明文密码信息是什么, ...

  2. Java 自带MD5加密 Demo

    package demo; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; pub ...

  3. Java中使用MD5加密的简单实现

    import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorith ...

  4. java 短连接+MD5加密短链接

    java 短连接+MD5加密短链接 import java.security.MessageDigest; public class ShotUrlUtil { public static void ...

  5. 通过java语言实现MD5加密

    通过java语言实现MD5加密public static String getMd5(String str) { try { MessageDigest md5 = MessageDigest.get ...

  6. Java实现文件的加密与解密

    最近在做一个项目,需要将资源文件(包括图片.动画等类型)进行简单的加密后再上传至云上的服务器,而在应用程序中对该资源使用前先将读取到的文件数据进行解密以得到真正的文件信息.此策略的原因与好处是将准备好 ...

  7. password、文件MD5加密,passwordsha256、sha384、sha512Hex等加密

    package encryption; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io. ...

  8. java中使用MD5加密技术

    在项目中经常会对一些信息进行加密,现在常用的信息加密技术有:MD5.RSA.DES等,今天主要说一下,md5加密,以及如何在java代码根据自己的业务需求使用md5. MD5简介: MD5即Messa ...

  9. java后端制作MD5加密

    由于一次业务的需要,我制作了一次密码的修改子业务. 当用户忘记密码的情况下,我需要动态的发给他一个6位的随机密码,通过即时通,短信,微信等.并同时修改数据库中的原密码为这6位的随机密码.让用户再去修改 ...

随机推荐

  1. BootStrap 实现导航栏nav透明,nav子元素文字不透明

    在给nav 的属性赋值 opacity:0.0透明度时会导致nav内子元素会继承opacity属性.此时再对子元素赋值opacity:1.0 时会导致 子元素实际opacity值为0.0*1.0=0. ...

  2. Foxmail 登录 qq 账号时无法登录 提示我们设置了独立密码或使用授权码登录的解决方法

    Foxmail 登录 qq 账号时无法登录  提示我们设置了独立密码或使用授权码登录的解决方法 1.首先我们设置我们邮箱的类型如下图所示 2.打开网页版的qq邮箱  在设置--->账户---&g ...

  3. LintCode 13. Implement strStr()

    LintCode 13. Implement strStr() 题目描述 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出 ...

  4. [thinkphp] 隐藏后台地址

    转自 http://document.thinkphp.cn/manual_3_2.html#module_deploy 如果不希望用户直接访问某个模块,可以设置模块映射(对后台的保护会比较实用). ...

  5. thinkphp之自动完成

    1.自动完成 自动完成是ThinkPHP提供用来完成数据自动处理和过滤的方法,使用create方法创建数据对象的时候会自动完成数据处理.  因此,在ThinkPHP使用create方法来创建数据对象是 ...

  6. CentOS7和CentOS6的主要区别

    了解一下就好 1.  文件系统的区别.CentOS6默认使用的是ext4的文件系统,而CentOS7使用的是xfs. 2.  硬盘默认调度算法不一样.CentOS6默认使用的是cfq,而CentOS7 ...

  7. 【DFS】算24点

    [tyvj2802/RQNOJ74]算24点 描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”.您作为游戏者将得到4个1~9之间的自然数作为操作数,而您 ...

  8. 【优先队列+贪心】POJ2431-Expedition

    解题方法详见<挑战程序设计竞赛(第二版)>P74-75.注意首先要对加油站以位置为关键字快排,不要遗忘把终点视作一个加油量为0的加油站,否则最终只能到达终点前的加油站. /*优先队列*/ ...

  9. django, form.errors处理

    from.errors其实就是一个字典, 可以利用for error in form.errors.values, 或者for key,  value in form.errors遍历得到其中的数据

  10. codevs 1345 饥饿的奶牛

    1345 饥饿的奶牛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description John养了若干奶牛,每天晚上奶牛都要进食.由于条件比较 ...