@Slf4j
@SpringBootTest
class Md5DemoApplicationTests {
/*
todo:
1. md5被加密的明文一致则加密后的密文必然一致
2. md5加密后的密文 不可以还原回 明文(不可逆)
*/
@Test
void test01() {
/*
因为 md5加密算法不可逆,所以加密后的密文是固定的,
用户输入的密码是对的则密文一定也是对的
注册: 123456->e10adc3949ba59abbe56e057f20f883e->入库
登录:123456->加密->e10adc3949ba59abbe56e057f20f883e->与数据库进行比较->登录成功
*/
String md5Hex = DigestUtil.md5Hex("123456");
System.out.println(md5Hex);
}
@Test
void testRainbowTable() {
/*
提前获取了123456的密文e10adc3949ba59abbe56e057f20f883e
彩虹表:常见密码的md5结果集
*/
HashMap<String, String> map = new HashMap<>();
for (int i = 0; i < 200000; i++) {
map.put(String.valueOf(i),DigestUtil.md5Hex(String.valueOf(i)));
}
String md5Hex = map.get("123456");
log.info("破译后的密码为:{}",md5Hex);
}
@Test
void testAddSalt() {
String password = "123456";
//给明文密码增加一个随机数(盐),让密文更难被破解
Random rand = new Random();
int salt = rand.nextInt(1000) + 1000;//salt字段入库
password = password + salt;//1234561037 ->实际被加密的明文
log.info("salt:" + salt);
log.info("password:" + password);
/*
664536ded67610c936d302f5bcf2ca47->推导出来的是1234561629
黑客以为1234561629是密码,然而真正的密码是123456
*/
String md5Hex = DigestUtil.md5Hex(password);
log.info("md5Hex:" + md5Hex);
/*
password salt
664536ded67610c936d302f5bcf2ca47 1629
*/
}
@Test
void testAddSaltAndIndex() {
String password = "123456";
//给明文密码增加一个随机数,让密文更难被破解
Random rand = new Random();
int salt = rand.nextInt(1000) + 1000;//salt字段入库
log.info("salt:{}", salt);
//随机的插入位置
int index = rand.nextInt(password.length());//index字段入库
log.info("index:{}", index);
password = password.substring(0, index) + salt + password.substring(index);
log.info("加盐后的密码:{}", password);
String md5Hex = DigestUtil.md5Hex(password);
log.info("md5Hex:{}", md5Hex);
/*
password salt index
a9ab727a7838b2c8d0acb5fc3ffb602a 1559 5
*/
}
@Test
void testDecode() {
String password = "123456";
int salt = 1172;
int index = 5;
String finalPassword = password.substring(0, index) + salt + password.substring(index);
log.info("password:{}", finalPassword);
if ("9964a8c3a1cf3c40795d2ed0ac8fa7ca".equals(DigestUtil.md5Hex(finalPassword))) {
log.info("密码正确");
} else {
log.info("密码错误");
}
}
}
MD5加密和解密(用Hutool工具)
最新推荐文章于 2024-10-04 15:55:22 发布