BCryptPasswordEncoder加密与MD5加密的区别及说明
目录
MD5加密说明
MD5(Message Digest Algorithm 5)中文名为消息摘要算法第五版,是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
MD5作为一种常用的摘要算法(或指纹算法),其具有以下几个重要的特点(个人观点):
输入任意长度信息,输出长度固定:
运算速度快:
不可逆:
碰撞性:
不安全:
2011年后MD5加密算法可以被反推出来明文,被破解,已经不推荐使用
案例使用
1.字符串
//加密为字符串返回
DigestUtils.md5DigestAsHex("123456".getBytes());
//结果为:e10adc3949ba59abbe56e057f20f883e
2.byte[]字节返回
//加密字节返回
DigestUtils.md5Digest("123456".getBytes());
//结果为:[B@49476842
3.在字符串后追加加密字符返回StringBuilder
StringBuilder stringBuilder1 = DigestUtils.appendMd5DigestAsHex(bytes,new StringBuilder("123456"));
//结果:1234564280d89a5a03f812751f504cc10ee8a5
解密的话,在java中还没有提供方法,但是有些网站是可以对MD5进行解密的
4. 如果对字符换加密过的字符串再次进行加密,则会出现一样的加密结果。
案例:
BCryptPasswordEncoder说明
BCrypt 是一种密码散列函数,即单向函数。
一个典型的解决方案是向用户发送一次性密码重置链接,使用秘密问题或其他一些确认用户身份的信息让他们设置新密码。
且每次加密过的值都不一样
案例使用
1.多次执行,结果不一样
public static void main(String[] args) {
String str = "123456";
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
String encode = bCryptPasswordEncoder.encode(str);
System.out.println(encode);
String encode1 = bCryptPasswordEncoder.encode(str);
System.out.println(encode1);
}
结果:
2.对加密过的字符和原始数据进行对比
案例:
public static void main(String[] args) {
String str = "123456";
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
String encode = bCryptPasswordEncoder.encode(str);
System.out.println(encode);
boolean matches1 = bCryptPasswordEncoder.matches(str, encode);
System.out.println(matches1);
}
结果:
3.加密过的字符串直接与字符串对比
案例:
public static void main(String[] args) {
String str = "123456";
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
String encode = bCryptPasswordEncoder.encode(str);
boolean matches = encode.matches(str);
System.out.println(encode);
System.out.println(matches);
}
结果:
由于str已经被BCryptPasswordEncoder 加密过,再次使用加密过的matches对比,是不一样的,加密过的str是一个新的对象encode ,新的对象encode 对比str,肯定是不一样的,则会返回false。
整理:
//另外BCryptPasswordEncoder的使用:
//加密:
bcryptPasswordEncoder.encoder(password)
//比较:
bcrytPasswordEncoder.matches(rawPassword,encodedPassword)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播