代码实现:

  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. Django2.x版本路由系统的正则写法以及视图函数的返回问题

    一.关于url.py urlpatterns每个元素的不再用url(),而是path(),最重要的一点是,正则的使用需要你自己手动导入re_path,并且在每个使用正则匹配的的元素用re_path() ...

  2. Ace Admin 学习笔记

    1. jqGrid  提交编辑数据,控制台报:Synchronous XMLHttpRequest on the main thread... jqGrid的选项设置async: true选项: aj ...

  3. CentOS上使用yum安装Apache

    关键词 CentOS上使用yum安装Apache 摘要 Apache在Linux系统中,其实叫“httpd”,它“无耻的”占据了官方名义!CentOS可以使用yum命令,非常简单和容易的安装Apach ...

  4. Mongodb 3.4 Replication

    官方文档:https://docs.mongodb.com/manual/replication/ 关于ReplSet的文档 https://docs.mongodb.com/manual/refer ...

  5. .net反射详解 原文://http://blog.csdn.net/wenyan07/article/details/27882363

    概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能. 运行时类型标识 运行时类型标识(RTTI),可以在程 ...

  6. POJ2828 Buy Tickets [树状数组,二分答案]

    题目传送门 Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 22611   Accepted: 110 ...

  7. HDU 6107 Typesetting (倍增)

    Typesetting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. 解决vscode按下ctrl+S的时候自动格式化

    按下ctrl+S的时候自动格式化 为什么需要这种操作? 优点: 保存的时候格式化,让我们的代码自动格式化,减少人工调整. 缺点: 有一些打好包的JS有时候修改一下,但不需要格式化,因为打好包就是要压缩 ...

  9. 【Tempest】openstack自动化测试组件tempest及自动化测试工具nose

    宝宝心里苦,但是宝宝只能在这穷乡僻壤说,下周又要开组会必须得干点事了.这次是做论文中的实验部分,主要利用到了openstack中的自动化测试组件Tempest,具体原因不细说了. 安装 分两种安装方法 ...

  10. [Atcoder Regular Contest 065] Tutorial

    Link: ARC065 传送门 C: 最好采取逆序贪心,否则要多考虑好几种情况 (从前往后贪心的话不能无脑选“dreamer”,"er"可能为"erase"/ ...