文章目录

  • 前言
  • 一、MessageDigest 类是什么?
  • 二、方法介绍
    • 1、getInstance
    • 2、update
    • 3、digest
    • 4、reset
    • 5、isEqual
  • 三、使用步骤
    • 1.创建报文摘要实例
    • 2.传入需要计算的字符串
    • 3.计算消息摘要
    • 4.处理计算结果
  • 四、MD5工具类
    • 1.MessageDigest实现对字符串的MD5加密算法
    • 2.MessageDigest实现对文本的MD5加密算法
    • 3.简化写法
  • 五、总结

前言

  金三银四,又到了求职招聘旺季,很多粉丝也在此期间找到了工作,开始了自己项目实战的首战,最近有几个粉丝小伙伴向我询问MD5加密相关方面的问题,于是我写下这篇博客,希望能帮助到需要的人,作为参加工作即将满一年的我,深知刚刚参加工作确实有很多需要学习的地方,一起加油~

一、MessageDigest 类是什么?

  MessageDigest 类是一个引擎类,全类名是:认识java.security.MessageDigest ,是Java自带的一个类,它是为了提供诸如 SHA1 或 MD5 等密码上安全的报文摘要功能而设计的。密码上安全的报文摘要可接受任意大小的输入(一个字节数组),并产生固定大小的输出,该输出称为一个摘要或散列。摘要具有以下属性:
1、无法通过计算找到两个散列成相同值的报文。
2、摘要不反映任何与输入有关的内容。
使用报文摘要可以生成数据唯一且可靠的标识符。有时它们被称为数据的“数字指纹”。

二、方法介绍

1、getInstance

  返回实现指定摘要算法的MessageDigest对象

/*** 返回实现指定摘要算法的MessageDigest对象** @param algorithm 请求的算法的名称* @param provider 提供者名称* @return MessageDigest 指定摘要算法的MessageDigest对象* @throws NoSuchAlgorithmException 当指定的请求算法名称不存在时抛出异常*/
public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException; /*** 返回实现指定摘要算法的MessageDigest对象** @param algorithm 请求算法的名称* @return MessageDigest 指定摘要算法的MessageDigest对象* @throws NoSuchAlgorithmException 当指定的请求算法名称不存在时抛出异常*/
public static MessageDigest getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException;

  Provider可以通过java.security.Security的getProviders() 方法获得已注册的提供者列表
  SUN提供的常用的算法:
    MD2
    MD5
    SHA-1
    SHA-256
    SHA-384
    SHA-512

2、update

  MessageDigest对象在开始时会被初始化,对象通过调用update() 方法处理数据

/*** 使用指定的byte数组更新摘要** @param input 指定的byte数组*/
public void update(byte[] input);

3、digest

  一旦所需要更新的数据都已经被更新后,应该调用digest() 方法完成Hash计算。
  对于给定数量的更新数据 ,digest() 方法只能被调用一次.在调用digest() 方法之后,MessageDigest对象被重新设置成初始状态。

/*** 通过执行诸如填充之类的最终操作完成Hash计算. * 在调用此方法之后,摘要被重置** @return byte[] Hash计算后的byte数组*/
public byte[] digest();

4、reset

  任何时候都可以调用reset() 方法重置摘要。

5、isEqual

   比较两个摘要的相等性.做简单的字节比较。

/*** 比较两个摘要的相等性.做简单的字节比较** @param digestA 比较的摘要字节数组A* @param digestB 比较的摘要字节数组B* @return boolean 是否相等*/
public static boolean isEqual(byte[] digestA, byte[] digestB);

三、使用步骤

1.创建报文摘要实例

  计算摘要的第一步是创建报文摘要实例。像所有的引擎类一样,获取某类报文摘要算法的 MessageDigest 对象的途径是调用 MessageDigest 类中的 getInstance 静态 factory 方法:

    public static MessageDigest getInstance(String algorithm)

  注意:算法名不区分大小写。例如,以下所有调用都是相等的:

   MessageDigest.getInstance("MD5") MessageDigest.getInstance("md5")  MessageDigest.getInstance("Md5")MessageDigest.getInstance("mD5")

  调用程序可选择指定提供者名称,以保证所要求的算法是由已命名提供者实现的:

    public static MessageDigest getInstance(String algorithm, String provider)

  调用 getInstance 将返回已初始化过的报文摘要对象。因此,它不需要进一步的初始化。

2.传入需要计算的字符串

m.update(x.getBytes(“UTF8” ));

  分析:x为需要计算的字符串,update传入的参数是字节类型或字节类型数组,对于字符串,需要先使用getBytes( )方法生成字符串数组。

3.计算消息摘要

byte s[ ]=m.digest( );

  分析:执行MessageDigest对象的digest( )方法完成计算,计算的结果通过字节类型的数组返回。

4.处理计算结果

  必要的话可以使用如下代码将计算结果s转换为字符串。

 StringBuffer buf = new StringBuffer("");for (int offset = 0; offset < b.length; offset++) {i = b[offset];if (i < 0)i += 256;if (i < 16)buf.append("0");buf.append(Integer.toHexString(i));}re_md5 = buf.toString();} catch (Exception e) {e.printStackTrace();}

四、MD5工具类

1.MessageDigest实现对字符串的MD5加密算法

/*** 将字符串转换为MD5*/public class ParseMD5 {public static String parseStrToMd5L32(String str) {// 将字符串转换为32位小写MD5 String reStr = null;try {MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] bytes = md5.digest(str.getBytes());StringBuffer stringBuffer = new StringBuffer();for (byte b : bytes) {int bt = b&0xff;if (bt < 16) {stringBuffer.append(0);}stringBuffer.append(Integer.toHexString(bt));}reStr = stringBuffer.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return reStr;}// 将字符串转换为32位大写的MD5public static String parseStrToMd5U32(String str) {String reStr = parseStrToMd5L32(str);if (reStr != null) {reStr = reStr.toUpperCase();}return resStr;}// 将字符串转换为16位小写的MD5public static String parseStrToMd5L16(String str) {String reStr = paseStrToMd5L32(str);if (reStr != null) {reStr = reStr.subString(8, 24);}return reStr;}// 将字符串转换为16位大写的MD5public static String parseStrToMd5U16(String str) {String reStr = parseStrToMd5L32(str);if (reStr != null) {reStr = reStr.toUpperCase().subString(8, 24);}return reStr;}}

2.MessageDigest实现对文本的MD5加密算法

public class MD5Util {// 将文本转换为32位小写的MD5public static String textToMd5L32(String plainText) {String result = null;// 判断需要转换的文本是否为空if (StringUtils.isBlank(plainText)) {return null;}try {// 进行实例化和初始化MessageDigest md5 = MessageDigest.getInstance("MD5");// 得到一个操作系统默认的字节编码格式的字节数组byte[] byteInput = plainText.getBytes();// 对得到的字节数组进行处理md5.update(byteInput);// 进行Hash计算并得到返回结果byte[] btResult = md5.digest();// 得到进行Hash计算后数据的长度StringBuffer stringBuffer = new StringBuffer();for (byte b : btResult) {int bt = b&0xff;if (bt < 16) {stringBuffer.append(0);}stringBuffer.append(Integer.toHexString(bt));}reStr = stringBuffer.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return reStr;}// 将文本转换为32位大写的MD5public static String textToMd5U32(String plainText) {if (StringUtils.isBlank(plainText)) {return null;}String result = textToMd5L32(plainText);result = result.toUpperCase();return result;}
}

3.简化写法

public class MD5 {public static String encryption(String plainText1) {String plainText=plainText1+"1@boduojiayuan#$@";String re_md5 = new String();try {//  返回实现指定摘要算法的MessageDigest对象MessageDigest md = MessageDigest.getInstance("MD5");//  对象通过调用update() 方法处理数据md.update(plainText.getBytes());// 调用digest() 方法完成Hash计算byte b[] = md.digest();int i;StringBuffer buf = new StringBuffer("");for (int offset = 0; offset < b.length; offset++) {i = b[offset];if (i < 0)i += 256;if (i < 16)buf.append("0");buf.append(Integer.toHexString(i));}// 将计算结果s转换为字符串re_md5 = buf.toString();} catch (Exception e) {e.printStackTrace();}return re_md5;}

五、总结

成为一个小胖子,没事摸摸小肚子~

使用Java的MessageDigest实现MD5加密算法相关推荐

  1. MD5加密算法与SHA加密算法

    2.MD5加密 2.1 概述 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为R ...

  2. Java之加密工具类java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils

    Java之加密(信息摘要)工具类(依赖:java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils) 1. java ...

  3. MD5加密算法解释——Java简单应用(java.security.MessageDigest)

    MD5解释 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于 ...

  4. 利用Java自带的MD5加密java.security.MessageDigest;

    MD5加密算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2.MD3.MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著 ...

  5. Java中间MD5加密算法完整版

    携带Java软件开发过程.,因此Java中提供了自带的MessageDigest实现对文本的加密算法,以下是一个对文本进行加密的MD5加密工具类代码演示样例: package net.yuerwan. ...

  6. MD5加密算法及其在Java中的使用

    MD5算法简介 MD5是不可逆的单向加密算法,因为哈希算法是不可逆的,简单来说,就像我们可以获知5%2=1,3%2=1,7%2=1,但是,当我们仅仅拿到结果1的时候并不知道这是哪个数对2取余得到的结果 ...

  7. java md5加密长度_java中使用MD5加密算法进行加密

    java中使用MD5加密算法进行加密以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在各种应用系统的开发中 经常需要存储 ...

  8. MD5加密算法及Java实现

    MD5加密算法及Java实现 上个学期在学数据库的时候,大作业是用Java Web+MySQL实现一个简易的系统,其中老师就提到了MD5算法,用来将用户提交的密码进行加密后放在数据库中,以防被泄露.在 ...

  9. java 和 c md5加密_Java与C++实现同样的MD5加密算法

    1.Java版 package com.lyz.utils.common; import java.io.UnsupportedEncodingException; import java.secur ...

  10. Java的MessageDigest类、MD5算法

    什么是MD5算法 MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash val ...

最新文章

  1. C# Socket编程笔记
  2. python与鸭子类型
  3. a 标签中调用js的几种方法
  4. java 多线程 总结_Java 多线程总结
  5. 如何通过BBED找回删除数据
  6. Efficient scaling in a Task-Based Game Engine
  7. [asp.netMVC]通过configSource提高web.config配置灵活性
  8. (转)fiddler使用简介--其二
  9. 微信小程序教程、微信小程序开发资源下载汇总(6.16日更新,持续更新中……)...
  10. 二元函数极限知识点总结
  11. 攻击日志分析 中职网络安全
  12. Java应用题:模拟一个简单的购房商贷月供计算器,按照以下公式计算总利息和每月还款金额,总利息=贷款金额*利率,贷款年限不同利率也不同,这里规定只有三种年限、利率,见表
  13. C++调用Matlab生成的DLL动态链接库进行混合编程(win10+VS2015+Matlab2016b)
  14. 商务部:快捷支付限额影响网购便捷性 不利于促进消费
  15. word embedding(详细讲解word embedding)
  16. Android Sensor 传感器总结
  17. 使用C语言实现杨辉三角
  18. boost:assert
  19. 洛谷算法题单:模拟与高精度例题(下)
  20. 安卓玩机搞机技巧综合资源-----手机隐藏拍照录像 取证软件 寻找隐藏摄像头 【十六】

热门文章

  1. 恩智浦半导体推出近距离非接触式读卡器IC CLRC663
  2. uni-app实战仿微信app开发
  3. Markdown 笔记神器 Typora 如何上传本地图片(图床功能)?
  4. XP不能访问WIN7资源
  5. app商品详情原数据 API ——淘宝/天猫
  6. 计算机金融sci,FINANCE AND STOCHASTICS《金融与随机分析》SSCI论文投稿_SSCI期刊大全_SSCI期刊点评_万维书刊网...
  7. 直方图规定化计算过程
  8. 步进电机28BYJ-48拆机图、原理和51/stm32测试程序
  9. 《运算放大器权威指南(Op Amps for Everyone)》读书笔记(一)
  10. xtreme toolkit pro——CXTPReportControl控件教程