目标

  1. 了解什么是md5,它有哪些特点
  2. 使用md5的工具类对字符串进行加密
  3. 提高md5的加密程度

应用场景

​ 在企业中,登录账户表,里面的密码是加密的,为了防止数据管理员或IT部内部人员数据泄密。注册用户的时候,添加用户,将用户数据新增到数据库里面的时候就将用户的密码加密存储。加密算法有很多种,有一种不可逆的加密算法MD5。

介绍

​ Message Digest Algorithm MD5(消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。

特点

  1. 压缩性:任意长度字符串根据散列哈希算法得到一个16进制32个字符长度的字符串
  2. 容易计算:从原数据计算出MD5值很容易。
  3. 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  4. 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
  5. 不可逆的算法:由A字符串加密成B字符串,B是永远无法反推出A的。

缺点:相同的明文,加密出来的结果是一样的
比如:123的md5值永远是202cb962ac59075b964b07152d234b70,我们可以在网上找到一些工具从而反编译出来。

md5工具

public class Md5Utils {/*** 对给定的字符使用md5进行加密,返回加密以后的字符串* * @param origin 要加密的字符串* @return 加密以后的*/public static String getMd5(String origin) {// 1) 使用静态方法,创建MessageDigest对象try {MessageDigest md = MessageDigest.getInstance("MD5");// 2) 将字符串使用utf-8进行编码,得到字节数组byte[] input = origin.getBytes("utf-8");// 3) 使用digest(input)对字节数组进行md5的哈希计算,得到加密以后的字节数组,长度是16个字节。byte[] num = md.digest(input);// 4) 使用类BigInteger(1, 加密后的字节数组),将这个二进制数组转成无符号的大整数// 1 正数, -1表示负数BigInteger big = new BigInteger(1, num);// 5) 将这个大整数转成16进制字符串,参数为多少进制return big.toString(16);} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}public static void main(String[] args) {System.out.println(Md5Utils.getMd5("123"));}
}

对给定字符使用md5进行加密得到下面的结果

解决方法

只对密码进行 md5 加密是肯定不够的。解决方法:即使用户的密码很短,只要我在他的短密码后面加上一段很长的字符,再计算 md5 ,那反推出原始密码就变得非常困难了。加上的这段长字符,我们称为盐(Salt),通过这种方式加密的结果,我们称为 密码加盐。

我们的解决方案是:

密码字段 = md5(用户名+密码+Salt)

使用UuidUtils 工具类产生盐(Salt)

public class UuidUtils {/*** 生成带有-的UUID字符串* @return 带有-的UUID字符串*/public static String uuid() {return UUID.randomUUID().toString();}/*** 生成不带有-的UUID字符串* @return 不带有-的UUID字符串*/public static String simpleUuid() {return uuid().replaceAll("-", "");}}

结果:

MD5加密介绍、工具类的使用相关推荐

  1. 分享一个MD5加密的工具类

    2019独角兽企业重金招聘Python工程师标准>>> package Utile;import java.math.BigInteger; import java.security ...

  2. JAVA md5加密的工具类

    编程中经常有用到MD5加密的情况,Java语言并没有像PHP一样提供原生的MD5加密字符串的函数,需要MD5加密的时候,往往需要自己写.以下是我写的md5工具类.留待以后使用 public class ...

  3. Java MD5 加密 解密 工具类

    package com.accountmanagement.techzero.util;public class MD5Helper {// 标准的构造函数,调用md5Init函数进行初始化工作pub ...

  4. MD5加密方式-工具类

    import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.security.MessageDigest;/*** Md5加 ...

  5. 手机号 MD5加密解密工具类

    package com.yestar.common.utils;import java.io.UnsupportedEncodingException; import java.security.Me ...

  6. MD5加密Java工具类

    原文:http://www.open-open.com/code/view/1421764946296 import java.security.MessageDigest; public class ...

  7. java des加密解密_Java实现的DES加密解密工具类实例

    本文实例讲述了Java实现的DES加密解密工具类.分享给大家供大家参考,具体如下: 一个工具类,很常用,不做深入研究了,那来可直接用 DesUtil.java package lsy; import ...

  8. 如何使用MD5加密解密工具?

    MD5加密解密工具是用于计算MD5消息摘要的工具,可以将文本.密码等数据进行加密处理以保护数据安全. 使用MD5加密解密工具通常需要输入待加密的字符串或文件,程序会自动通过预设的算法计算出与此字符串对 ...

  9. java des 加密工具的使用,Java中DES加密解密工具类的实现实例

    这篇文章主要介绍了Java实现的DES加密解密工具类,结合具体实例形式分析了Java实现的DES加密解密工具类定义与使用方法,需要的朋友可以参考下 本文实例讲述了Java实现的DES加密解密工具类.分 ...

  10. C# MD5加密解密帮助类

    /// <summary>     /// MD5加密解密帮助类     /// </summary>     public static class DESHelper    ...

最新文章

  1. MLIR中间表示和编译器框架
  2. 2021年大数据常用语言Scala(七):基础语法学习 条件表达式
  3. 2021河南省高考文科成绩排名查询,2021年河南高考成绩排名及一分一段表
  4. linux top交叉编译_Linux 系统下ARM Linux交叉编译环境crosstool工具
  5. 机器学习实战(五)——Logistic 回归
  6. 也谈子网划分和子网通信
  7. 每日一笑 | 老板,黑凤梨真的能吃吗?
  8. mysql 5.7 not null_mysql5.7基础 select...where...is not null 查找不为NULL的内容
  9. freeCodeCamp:Diff Two Arrays
  10. Redis持久化RDB
  11. 内存管理(注意事项和重点)
  12. linux内核完全剖析0.11,linux0.11内核完全剖析 - ramdisk.c
  13. windows下mysql解压包安装
  14. 拼接字符串时的引号嵌套
  15. python读取大文件太慢_强悍的Python读取大文件的解决方案
  16. linux rz 安装包,Linux系统手动安装rz sz 软件包
  17. 【解决办法】EFI分区扩容/win10更新提示“我们无法更新系统保留的分区”
  18. Relative Ranks问题及解法
  19. 小狗钱钱:钱钱的金钱语录
  20. 山茶油的功效与食用方法

热门文章

  1. python csv数据处理生成图_Python 读取CSV文件数据并生成可视化图形
  2. CIFAR10图像识别
  3. 时间序列--自回归模型
  4. python读取.pkl格式的文件
  5. Materials - 使用Substance Designer制作哥特式花纹
  6. 关于html页面转为 jsp页面中文乱码问题
  7. Ubuntu18 root账号自动登陆
  8. 关于浏览器插件的使用
  9. 驱动开发:蓝屏BSOD 0x3B 内存访问错误
  10. Calibre与netlist后仿网表的仿真。