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)

  总结

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

  您可能感兴趣的文章: