什么是MD5

MD5(Message-Digest Algorithm 5),即消息摘要算法第五版,是一种被广泛使用的密码散列函数。散列算法的基础原理是:将数据(如一段文字)运算演变为另一段固定长度(16/32)的值。

是否属于加密算法

说法不一:

1.不属于:没有解密算法,密文(散列值)不可逆向得到原文;
     2.属于:明文经MD5处理后看不到原文,视为加密状态,类似BASE64算法只能算编码算法。

MD5用途

1.防止被篡改:
       如发送电子文档、接口数据传输、文件下载等,为了第三方在中途对数据进行篡改。

2.防止直接看到明文:
      数据库存储用户的密码的时候都是存储用户密码的MD5值。这样就算得到数据库的用户密码的MD5值,也无法知道用户的密码。

3.防止抵赖(数字签名):
这需要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘要信息并做好记录。若以后A说这文件不是他写的,权威机构只需对此文件重新产生摘要信息,然后跟记录在册的摘要信息进行比对,相同的话,就证明是A写的了。这就是所谓的“数字签名”。

MD5安全性

比较完全,但是也有部分密码是可以暴力破解(撞库),因为很多用户的密码都使用生日、纪念日、吉利的数字、英文单词等。所以网站密码的策略应该强制要求用户使用字母+数字+特殊字符+大小写混搭的组合的方式提高密码的安全度。

MD5工具类

废话不多唠,直接上代码,含注释:

package com.common.utils.md5;import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;import org.apache.commons.codec.digest.DigestUtils;
import org.apache.poi.util.IOUtils;/**
* @ClassName: MD5Util
* @Description:MD5加密/验证工具类
* @author weny.yang
* @date May 11, 2021
*/
public class MD5Util {/*** @Title: md5Lower* @Description:不加盐值32位小写* @author weny.yang* @date May 11, 2021*/public static String md5Lower(String plainText) {String md5 = null;if (null != plainText && !"".equals(plainText)) {try {MessageDigest md = MessageDigest.getInstance("MD5");md.update(plainText.getBytes("UTF-8"));md5 =  new BigInteger(1, md.digest()).toString(16);} catch (Exception e) {e.printStackTrace();}}return md5;}/*** @Title: md5Lower* @Description:加盐值32位小写* @author weny.yang* @date May 11, 2021*/public static String md5Lower(String plainText, String saltValue) {String md5 = null;if (null != plainText && !"".equals(plainText) && null != saltValue && !"".equals(saltValue)) {try {MessageDigest md = MessageDigest.getInstance("MD5");md.update(plainText.getBytes("UTF-8"));md.update(saltValue.getBytes("UTF-8"));md5 = new BigInteger(1, md.digest()).toString(16);} catch (Exception e) {e.printStackTrace();}}return md5;}/*** @Title: md5_16Lower* @Description:不加盐值16位小写* @author weny.yang* @date May 11, 2021*/public static String md5_16Lower(String plainText) {String md5 = md5Lower(plainText);return null==md5?md5:md5.substring(8, 24);}/*** @Title: md5_16Lower* @Description:加盐值16位小写* @author weny.yang* @date May 11, 2021*/public static String md5_16Lower(String plainText, String saltValue) {String md5 = md5Lower(plainText, saltValue);return null==md5?md5:md5.substring(8, 24);}/*** @Title: md5_16Upper* @Description:不加盐值16位大写* @author weny.yang* @date May 11, 2021*/public static String md5_16Upper(String plainText) {String md5 = md5_16Lower(plainText);return null==md5?md5:md5.toUpperCase();}/*** @Title: md5_16Upper* @Description:加盐值16位大写* @author weny.yang* @date May 11, 2021*/public static String md5_16Upper(String plainText, String saltValue) {String md5 = md5_16Lower(plainText, saltValue);return null==md5?md5:md5.toUpperCase();}/*** @Title: md5Upper* @Description:不加盐值32位大写* @author weny.yang* @date May 11, 2021*/public static String md5Upper(String plainText) {String md5 = md5Lower(plainText);return null==md5?md5:md5.toUpperCase();}/*** @Title: md5Upper* @Description:加盐值32位大写* @author weny.yang* @date May 11, 2021*/public static String md5Upper(String plainText, String saltValue) {String md5 = md5Lower(plainText, saltValue);return null==md5?md5:md5.toUpperCase();}public static void main(String[] args) {String plainText = "123456";//明文String saltValue = "8";//盐值System.out.println(md5_16Lower(plainText));System.out.println(md5_16Upper(plainText));System.out.println(md5Lower(plainText));System.out.println(md5Upper(plainText));System.out.println("====================");System.out.println(md5_16Lower(plainText, saltValue));System.out.println(md5_16Upper(plainText, saltValue));System.out.println(md5Lower(plainText, saltValue));System.out.println(md5Upper(plainText, saltValue));}
}

MD5工具类(含16位、32位、加盐、无盐、大小写)相关推荐

  1. JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写

    package com.fty.util;import java.security.SecureRandom; import java.util.Random; import java.util.co ...

  2. .NET生成常用16、32位MD5加密的两种方法

    //MD5加密函数比较复杂,在.NET中我们不需要编写底层的算法. //平台已经提供两个生成MD5加密的方法: //经过改动一点就可以生成如现在DVBBS等论坛中使用的MD5密码 //⑴:使用C:\W ...

  3. ASP.Net中MD5加密-16位32位

    public string md5(string str,int code) { if(code==16) //16位MD5加密(取32位加密的9~25字符) { return System.Web. ...

  4. js实现md5加密,可以加密成16位或32位

    js实现md5加密,可以加密成16位或32位 md5在线加密工具 js实现md5加密 加密成16位 加密成32位 md5在线加密工具 md5在线加密工具,321在线工具站 https://www.32 ...

  5. BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的

    BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的 原文:http://blog.csdn.net/qq445803843/article/details/46476433 这段代 ...

  6. 16位/32位中断机制比較

    16位/32位中断机制比較 原理: 16位中断机制:使用中断向量表 32位中断机制:使用中段描写叙述符表IDT 位置: 中断向量表的位置是固定的,位于内存的開始0x00000 中断向量符表位置不固定, ...

  7. 8位16位32位单片机区别

    8位16位32位区别 8位单片机的数据总线宽度为8位,通常直接只能处理8位数据: 16位单片机的数据总线宽度为16位,通常可直接处理8位或16位数据. 8位数据类型所占大小 16位数据类型所占大小 s ...

  8. Java实现MD5工具类

    目录 一.简介 二.MD5的特性 三.MD5工具类 四.实践 结语 一.简介   MD5 消息摘要算法是一种广泛使用的哈希函数,具有 128 位哈希值.虽然 MD5 最初被设计为用作加密哈希函数,但已 ...

  9. MD5工具类的代码实现和手动解密

    大佬看了记得点个赞,谢谢!!!  如果仅仅是MD5的话可以使用spring封装的工具类DigestUtils. String str = "需要加密的字符串"; str= Dige ...

最新文章

  1. Python之初识模块之序列化模块
  2. Python Module — grpcio gRPC 远程调用示例程序
  3. 在邮件标头中找到无效的字符_在实践中重试HTTP标头
  4. Nginx配置wss访问实现微信小程序的websocket通信
  5. 基于 HTML5 WebGL 的 3D 工控裙房系统
  6. C++ STL map和multimap的简单使用
  7. SSH框架总结(框架分析+环境搭建+实例源码下载) 《转》
  8. 产品的国内版和国际版背后的思考
  9. metasploit命令及模块
  10. 如何将数据库删除干净
  11. 矿山安全监测预警与综合管理信息系统解决方案
  12. R语言dplyr入门到进阶
  13. 关于Allele(等位基因)的理解
  14. python查看哪些内存被释放_python内存不释放原理 | shell's home
  15. acwing-小猫爬山
  16. 【转载】Jupyter Lab中的plot.ly离线模式不显示图
  17. (转载)阿里云开心过早!腾讯不构成威胁,请别忘了,网宿仍是国内老大
  18. Leetcode 刷题必须Review 二 Leetcode(912 215 315 53)
  19. 模式,动态,数据化及其他
  20. JAVA实现远程控制(JAVA in RemoteControl)

热门文章

  1. oracle 数据库密码生产同步模拟环境 ,随记常用命令
  2. 诺基亚5800 XM实测
  3. 鼠标右键,以管理员身份在当前目录打开命令行窗口
  4. 修改el-Badge 标记 content的位置
  5. systemctlm-cosim-demo环境搭建
  6. shell脚本控制jar包启停
  7. 批量修改数据表字段结构,批量查询相同数据类型的表
  8. 【超详细】开源JZVideo饺子播放器播放器配置使用以及其自定义
  9. 1951. 宇宙人浇花(最大异或对变形)
  10. Java:计算圆形和长方形的面积