MD5加密介绍、工具类的使用
目标
- 了解什么是md5,它有哪些特点
- 使用md5的工具类对字符串进行加密
- 提高md5的加密程度
应用场景
在企业中,登录账户表,里面的密码是加密的,为了防止数据管理员或IT部内部人员数据泄密。注册用户的时候,添加用户,将用户数据新增到数据库里面的时候就将用户的密码加密存储。加密算法有很多种,有一种不可逆的加密算法MD5。
介绍
Message Digest Algorithm MD5(消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
特点
- 压缩性:任意长度字符串根据散列哈希算法得到一个16进制32个字符长度的字符串
- 容易计算:从原数据计算出MD5值很容易。
- 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
- 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
- 不可逆的算法:由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加密介绍、工具类的使用相关推荐
- 分享一个MD5加密的工具类
2019独角兽企业重金招聘Python工程师标准>>> package Utile;import java.math.BigInteger; import java.security ...
- JAVA md5加密的工具类
编程中经常有用到MD5加密的情况,Java语言并没有像PHP一样提供原生的MD5加密字符串的函数,需要MD5加密的时候,往往需要自己写.以下是我写的md5工具类.留待以后使用 public class ...
- Java MD5 加密 解密 工具类
package com.accountmanagement.techzero.util;public class MD5Helper {// 标准的构造函数,调用md5Init函数进行初始化工作pub ...
- MD5加密方式-工具类
import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.security.MessageDigest;/*** Md5加 ...
- 手机号 MD5加密解密工具类
package com.yestar.common.utils;import java.io.UnsupportedEncodingException; import java.security.Me ...
- MD5加密Java工具类
原文:http://www.open-open.com/code/view/1421764946296 import java.security.MessageDigest; public class ...
- java des加密解密_Java实现的DES加密解密工具类实例
本文实例讲述了Java实现的DES加密解密工具类.分享给大家供大家参考,具体如下: 一个工具类,很常用,不做深入研究了,那来可直接用 DesUtil.java package lsy; import ...
- 如何使用MD5加密解密工具?
MD5加密解密工具是用于计算MD5消息摘要的工具,可以将文本.密码等数据进行加密处理以保护数据安全. 使用MD5加密解密工具通常需要输入待加密的字符串或文件,程序会自动通过预设的算法计算出与此字符串对 ...
- java des 加密工具的使用,Java中DES加密解密工具类的实现实例
这篇文章主要介绍了Java实现的DES加密解密工具类,结合具体实例形式分析了Java实现的DES加密解密工具类定义与使用方法,需要的朋友可以参考下 本文实例讲述了Java实现的DES加密解密工具类.分 ...
- C# MD5加密解密帮助类
/// <summary> /// MD5加密解密帮助类 /// </summary> public static class DESHelper ...
最新文章
- MLIR中间表示和编译器框架
- 2021年大数据常用语言Scala(七):基础语法学习 条件表达式
- 2021河南省高考文科成绩排名查询,2021年河南高考成绩排名及一分一段表
- linux top交叉编译_Linux 系统下ARM Linux交叉编译环境crosstool工具
- 机器学习实战(五)——Logistic 回归
- 也谈子网划分和子网通信
- 每日一笑 | 老板,黑凤梨真的能吃吗?
- mysql 5.7 not null_mysql5.7基础 select...where...is not null 查找不为NULL的内容
- freeCodeCamp:Diff Two Arrays
- Redis持久化RDB
- 内存管理(注意事项和重点)
- linux内核完全剖析0.11,linux0.11内核完全剖析 - ramdisk.c
- windows下mysql解压包安装
- 拼接字符串时的引号嵌套
- python读取大文件太慢_强悍的Python读取大文件的解决方案
- linux rz 安装包,Linux系统手动安装rz sz 软件包
- 【解决办法】EFI分区扩容/win10更新提示“我们无法更新系统保留的分区”
- Relative Ranks问题及解法
- 小狗钱钱:钱钱的金钱语录
- 山茶油的功效与食用方法