题记:本人自测了很多次,该算法和apache的commons utils包中的MD5算法计算一致

一、针对文件内容生成MD5值

应用场景:针对文件,在传输过程由于网络原因丢帧或者被人别恶意篡改内容,可以通过源文件的MD5和下载后的文件MD5值进行比较,如果一致说明文件内容相同,否则下载的文件有问题。

  该MD5代码计算这个文件内容,生成一个MD5值。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
/**
* 一次性处理的文件字节数
*/
private static final int ONE_HANDLE_FILE_BYTE_COUNT = 8192; /**
* MD5 算法
*/
private static final String MD5_ALGORITHM = "MD5"; /**
* 无数据的索引值
*/
private static final int NOT_DATA_INDEX = -1; /**
* 正数符号
*/
private static final int POSITIVE_SIGN = 1; /**
* 十六进制
*/
private static final int HEXADECIMAL = 16; /**
* 生成文件内容的 MD5 值
*
* @param file
* @return
*/
public static String generateMD5(File file) {
if (!file.isFile())//不是文件
return null; MessageDigest digest;
FileInputStream in = null;
byte buffer[] = new byte[ONE_HANDLE_FILE_BYTE_COUNT];
int len;
try {
digest = MessageDigest.getInstance(MD5_ALGORITHM);
in = new FileInputStream(file); while ((len = in.read(buffer)) != NOT_DATA_INDEX) {
digest.update(buffer, 0, len);
}
BigInteger bigInteger = new BigInteger(POSITIVE_SIGN, digest.digest());
return bigInteger.toString(HEXADECIMAL);
} catch (NoSuchAlgorithmException e) {
//logger.error(" 生成文件内容的 MD5", e);
e.printStackTrace();
return null;
} catch (FileNotFoundException e) {
//logger.error(" 生成文件内容的 MD5", e);
e.printStackTrace();
return null;
} catch (IOException e) {
// logger.error(" 生成文件内容的 MD5", e);
e.printStackTrace();
return null;
} finally {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
// logger.error("关闭文件", e);
}
}
} /* public static void main (String[]args){ String md5 = MD5Util.generateMD5( new File("D:\\ip_20180823102738.txt"));
System.out.println(md5);
}*/ }

二、针对字符串生成MD5值

应用场景:参数传输,保证参数的一致性

  这里采用apache的commons包中的MD5工具类计算。

import org.apache.commons.codec.digest.DigestUtils;
public class MD5Util {
  public static void main (String[]args){
String md5Test="MD5摘要算法";
System.out.println(md5Test);
String md5Hex = DigestUtils.md5Hex(md5Test); #使用工具类对字符串生成MD5值
System.out.print(md5Hex);
}
}

Apache的commons包下载地址:http://commons.apache.org/proper/commons-codec/download_codec.cgi

##想了解更多加密算法,可以看https://www.cnblogs.com/ywjfx/p/9902628.html

最新文章

  1. 三种上传文件不刷新页面的方法讨论:iframe/FormData/FileReader
  2. 【转】SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误
  3. XMPP iOS客户端实现三:登录、注册
  4. codeforces Hill Number 数位dp
  5. FBI是如何破获“美国少女”裸照勒索案的
  6. Docker 定制容器镜像的2种方法
  7. sshd_config配置 详解
  8. asp.net中的mysql传参数MySqlParameter
  9. P1024 外星人的密码数字
  10. twitter的snowflake算法(C#版本)
  11. IntelliJ Idea取消Could not autowire. No beans of 'xxxx' type found的错误提示
  12. PHP中的数组方法及访问方法总结
  13. Javascript入门视频教程
  14. angular-bootstrap ui-date组件问题总结
  15. Python Web 框架:Tornado
  16. Codeforces 1083C Max Mex [线段树]
  17. VMware复制CentOS7,网络配置问题处理
  18. Emscripten 安装和使用
  19. C# windows服务:如何获取服务程序所在的文件夹
  20. 学习asp.net的流程

热门文章

  1. HTML 做圆形头像
  2. 内核模式构造-Event构造(WaitLock)
  3. 【两种方式】vuex 如何监听页面状态的变化
  4. Pyspark常用API总结
  5. java线程基础巩固---多线程与JVM内存结构的关系及Thread构造函数StackSize的理解
  6. Python:多进程。
  7. 神奇的系统bug
  8. poj3691 DNA repair[DP+AC自动机]
  9. 移动/Web开发必备工具!DevExtreme v19.1.7火热发布
  10. 小程序是单页面应用,有一个页面执行wx.showLoading(),其他页面也会显示