MD5加密、加盐和去盐

前言

在程序里有一些敏感信息需要加密。下面列一下常见的加密:

  • 散列加密 MD5是不可逆、不能解密、速度快等特点。
  • 对称加密法:根据相同的钥匙,进行加密和解密 大数据量的加密和解密。
  • 不对称加密法:两把钥匙,A钥匙加密的东西,B钥匙可以解开。B钥匙加密的东西,A钥匙可以解开,可以确认身份和加密,但是少量的数据。





示例

本次示例使用散列加密MD5,MD5现在已经被破解了,可以实现可逆。
下面把123加密出来,然后拿加密码到md5在线解密破解里面破解 。

在这里插入图片描述



我们看到已经解密出来了
在这里插入图片描述


所以现在的程序员都会削减脑袋想办法加密。然后有一种叫加盐的方法,这个方法很实用。它是在员在加密后在固定的某几个位置加入随机的字符。
在这里插入图片描述


现在我们拿加盐后加密码去解密。可以看到这个加盐后的码是解不开的,那么我们自己的程序怎么识别。来,那就是我们是不是知道在什么位置加了盐,是吧。然后我们就可以按我们之前记录的位置去盐。去盐的就不演示啦,下面已经把加密、加盐和去盐封装成一个方法。源码如下。
在这里插入图片描述


源码:

package com.bdqn.it.util;

import java.math.BigInteger;
import java.security.MessageDigest;

public class MD5Util {
	
	// 加盐位置
	public static int[] salts = { 3, 8, 16, 22, 25 };
	// 加密
	public static String degst(String str){
		try {
			MessageDigest md5 = MessageDigest.getInstance("md5");
			byte[] bb = md5.digest(str.getBytes("utf-8"));
			
			// 1:不需要正负号,16:输出十六进制数据
			String r = new BigInteger(1, bb).toString(16);
			return r;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
	// 加盐方法
	public static String addSalt(String md5Str) {

		StringBuffer sb = new StringBuffer(md5Str);

		for (int n = salts.length - 1; n >= 0; n--) {
			int r = (int) (Math.random() * 10);

			// 插入随机数
			sb.insert(salts[n], r);
		}
		return sb.toString();
	}

	// 去盐方法
	public static String delSalt(String md5Str) {
		StringBuffer sb = new StringBuffer(md5Str);

		for (int n = 0; n < salts.length; n++) {
			sb.deleteCharAt(salts[n]);
		}
		return sb.toString();
	}
}

发布了26 篇原创文章 · 获赞 3 · 访问量 1436

猜你喜欢

转载自blog.csdn.net/CQWNB/article/details/103313533
今日推荐