题记:本人自测了很多次,该算法和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

加密算法之 MD5算法的更多相关文章

  1. MD5算法C/C++的实现

    博客链接:http://blog.csdn.net/qq1084283172/article/details/52334027 在逆向程序的时候,经常会碰到加密的算法的问题,前面分析UC的逆向工程师的 ...

  2. 加密算法极先锋之MD5算法

    在开发过程中,避免不了要涉及到数据加密,比如用户账号密码的加密,用户敏感数据的加密,涉及到的加密算法种类繁多,作为拿来主义的开发者时间精力有限,能够清楚其中主流的加密算法和用途,就已经足够了. 主要的 ...

  3. [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...

  4. md5算法原理一窥(其一)

    首先,需要了解的事,md5并不是传说中的加密算法,只是一种散列算法.其加密的算法并不是我们说所的那样固定不变,只是一种映射的关系. 所以解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD ...

  5. Java利用MessageDigest提供的MD5算法加密字符串或文件

    MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性.用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm).另外还有一种常用的消息摘要算法SHA1.如果想了 ...

  6. C#封装加密算法(MD5、SHA、HMAC、DES、RSA)的一个类

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...

  7. MD5算法【计算文件和字符串的MD5值】

    1. MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法(易错).任何长度的任意内容都可以用MD5计算出散列值.MD5的前身:MD2.MD3.MD4.介绍工具:CalcMD5 ...

  8. 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...

  9. password技术应用设计实践-安全信息传输系统(SITS)(用Java实现DES、RSA、MD5算法)

    本系统包含五个模块,注冊模块.登录模块.RSA算法模块.DES算法模块.MD5算法模块. 这五个模块每个实现不同的功能. 注冊模块实现将username和password写入文件里,登录模块则负责将其 ...

随机推荐

  1. 【转】Linux设置和查看环境变量的方法

    转: http://www.jb51.net/LINUXjishu/77524.html 1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量 ...

  2. 4.5. scrapy两大爬虫类_Spider

    一:Spider Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取 的 ...

  3. linux 计划任务超时控制和并发控制

    Linux crontab 的配置存放 /var/spool/cron 目录下. Linux crontab的日志文件存放再 /var/log/cron* timeout 命令 timeout 给脚本 ...

  4. 小程序UI设计(10)-巧用模板,事半功倍

    工具中为小程序员们准备了符合微信开发规范的模板.之前帖子中介绍的规范都在模板中已经设计好了,可以直接复制粘贴使用.下图中的样式是从模板直接复制过来的.实际使用时只要更换为自己的图片和文字即可.自动生成 ...

  5. httpwatch

    https://blog.csdn.net/coderising/article/details/89530016 别人的文章

  6. QT一个最简单的openGL例子

    创建一个基类为widget的工程 把文件夹glut64放到代码目录下,文件夹包含以下文件 freeglut.dll freeglut.lib glut.h freeglut.h freeglut_ex ...

  7. 分布式 一致性Paxos算法(转载)

    比较通俗易懂,可以入门,转载地址是http://www.cnblogs.com/linbingdong/p/6253479.html Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有 ...

  8. (web)个人项目(挖宝网)

    前台:使用bootstrap. 后台:使用layui. 数据库:mysql 下载地址:https://github.com/oukele/wabaowangDemo(数据库文件忘记上传,我在展示功能结 ...

  9. 前端Web浏览器基于Flash如何实时播放监控视频画面(二)之Windows搭建(RTMP)流媒体服务器

    本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 获取 流媒体服务器有很多,这里以nginx为例. nginx for Wind ...

  10. Ubuntu:笔记本计算机屏幕合盖后进入/不进入休眠设置

    造冰箱的大熊猫,本文在Ubuntu 18.04上验证通过@cnblogs 2019/5/12 1.问题描述 安装有Ubuntu的笔记本计算机与KVM控制器相连,同时一台台式机也与KVM相连.启动笔记本 ...