MD5加密、工具类的使用

MD5加密介绍

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

应用场景

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

特点:

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

缺点:相同的明文,加密出来的结果是一样的  

密码加盐 

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

固定md5工具类 --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);
		}
	}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值