代码实现:

  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. Search for a Range——稍微升级版的二分查找

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...

  2. Convolutional Neural Networks卷积神经网络

    转自:http://blog.csdn.net/zouxy09/article/details/8781543 9.5.Convolutional Neural Networks卷积神经网络 卷积神经 ...

  3. QQ分享 QQ空间分享 API链接:

    QZone: "http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={{URL}}&title={{TITL ...

  4. webpy 上传文件

    x = web.input(myfile={})是一个类字典对象,会返回所有GET或POST的数据 括号内部用来设置myfile的默认值,以防请求中根本就没有myfile键 定义如下一个表单 form ...

  5. 6.Spark streaming技术内幕 : Job动态生成原理与源码解析

    原创文章,转载请注明:转载自 周岳飞博客(http://www.cnblogs.com/zhouyf/)   Spark streaming 程序的运行过程是将DStream的操作转化成RDD的操作, ...

  6. bootstrap bootstrapvalidator插件+adjax验证使用

    1.利用bootstrap Validator表单验证进行表单验证需要如下CSS和JS. <link rel="stylesheet" type="text/css ...

  7. UVA 548.Tree-fgets()函数读入字符串+二叉树(中序+后序遍历还原二叉树)+DFS or BFS(二叉树路径最小值并且相同路径值叶子节点权值最小)

    Tree UVA - 548 题意就是多次读入两个序列,第一个是中序遍历的,第二个是后序遍历的.还原二叉树,然后从根节点走到叶子节点,找路径权值和最小的,如果有相同权值的就找叶子节点权值最小的. 最后 ...

  8. 7/31 CSU-ACM2018暑期训练7-贪心

    比赛链接 A-CSU - 1588 现在有n堆果子,第i堆有ai个果子.现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数.求合并所有果子的最小代价. Input 第一行包含一个整数T(T ...

  9. STM32通用定时器实现LED灯闪烁

    刚才看了一下STM32通用定时器的教程,其实和51的定时器使用差不多.只是因为32的时钟更复杂,可操控的寄存器更多,所以写的时候可能更复杂. 使用通用定时器中断的一般步骤:1.使能定时器时钟 这个需要 ...

  10. springMVC中Unknown return value type: java.lang.Integer(解决)

    controller层返回值类型为Integer,然而报 Unknown return value type: java.lang.Integer 这个错误,500错误 解决办法:在此方法上写上注解@ ...