MD5简介及使用方式

概念

MD5加密算法全称是 Message-Digest Algorithm 5(信息-摘要算法),它对信息进行摘要采集,再通过一定的位运算,最终获取加密后的MD5字符串。

MD5的特点

  • 针对不同长度的待加密的数据、字符串等等,其都可以返回一个固定长度的MD5加密字符串。(通常为32位的16进制字符串)
  • 其加密过程几乎不可逆,除非维护一个庞大的Key-Value数据库来进行碰撞破解,否则几乎无法解开。
  • 运算简便,且可实现方式多样,通过一定的处理方式也可以避免碰撞算法的破解。(例如加盐:添加随机字符串)
  • 对于一个固定的字符串、数字等等,MD5加密后的字符串也是固定的,也就是说不管MD5加密多少次,都是同样的结果。

使用方式【Java】

1. 添加md5依赖坐标

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.3.2</version>
</dependency>
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.3</version>
</dependency>

2. 编写工具类

public class Md5 {
		/**
		 * MD5加密方法
		 *
		 * @param text 明文
		 * @param key  秘钥
		 * @return 密文
		 * @throws Exception
		 */
		public static String md5(String text, String key) throws Exception {
			// 加密后的字符串
			String encodeStr = DigestUtils.md5Hex(text + key);
			return encodeStr;
		}
		
		/**
		 * MD5验证方法
		 *
		 * @param text 明文
		 * @param key  秘钥
		 * @param md5  密文
		 * @return true
		 * @throws Exception
		 */
		public static boolean verify(String text, String key, String md5) throws Exception {
			// 根据传入的密钥进行验证
			String md5Text = md5(text, key);
			if (md5Text.equalsIgnoreCase(md5)) {
				System.out.println("MD5验证通过!");
				return true;
			}
			return false;
		}
		
    	// 测试方法
		public static void main(String[] args) throws Exception {
			// 注册:用户名tom 密码123456
			// 添加用户时,进行加密
			String testString = Md5.md5("123456", "testKey");
			System.out.println("经MD5加密后的字符串为:" + testString);
			
			// 登录:用户名tom 密码123456     select * from user where username = tom and password = 123456
			// 根据用户名进行查询 f00485441dfb815c75a13f3c3389c0b9
			boolean verify = Md5.verify("123456", "testKey", "f00485441dfb815c75a13f3c3389c0b9");
			System.out.println(verify);
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦翼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值