对密码加密(MD5、BCrypt)

  1. 密码加密

  1. 摘要加密

  • 摘要加密:对数据进行哈希运算来生成一个固定长度的摘要(也称为哈希值或消息摘要)。

  • 特点:不可逆,唯一性

  • 场景:密码加密、数字签名

  • 常见的加密算法:MD5、BCrypt

    • 加密算法的工具类DigestUtils

    • MD5 DigestUtils.md5DigestAsHex("123456".getBytes()); 提供者cn.hutool.crypto.digest.BCrypt;

    • BCrypt BCrypt.hashpw("123456", BCrypt.gensalt()); 提供者 cn.hutool.crypto.digest.BCrypt;

  1. MD5加密 VS BCrypt加密

MD5BCrypt
长度是32 长度是60
同一个字符串加密多次都是相同的 同一个字符串加密多次是不同的
  1. 代码测试

package com.zzyl.test;

import cn.hutool.crypto.digest.BCrypt;
import org.springframework.util.DigestUtils;

public class PasswordTest {

   public static void main(String[] args) {
       //md5加密
       String md5Pswd1 = DigestUtils.md5DigestAsHex("123456".getBytes());
       String md5Pswd2 = DigestUtils.md5DigestAsHex("123456".getBytes());
       System.out.println(md5Pswd1);
       System.out.println(md5Pswd2);
       System.out.println(md5Pswd1.equals(md5Pswd2));

       System.out.println("-------------------------------------");

       String password1 = BCrypt.hashpw("123456", BCrypt.gensalt());
       String password2 = BCrypt.hashpw("123456", BCrypt.gensalt());
       System.out.println(password1);
       System.out.println(password2);
       System.out.println(password1.equals(password2));
  }
}

输出的结果如下:

e10adc3949ba59abbe56e057f20f883e
e10adc3949ba59abbe56e057f20f883e
true
-------------------------------------
$2a$10$rkB/70Cz5UvsE7F5zsBh8O2EYDoGus3/AnVrEgP5cTpsGLxM8iyG6
$2a$10$QIefMa.FmFIb2k2S9/jO7e1S3b0aeXCMtGS/ArKUyt6q28deYQrfy
false
  • md5对于同一个字符串加密多次都是相同的

  • BCrypt对于同一个字符串加密多次是不同的,主要是因为添加了随机盐(随机字符串),更加安全

其中BCrypt提供了一个方法,用于验证密码是否正确

boolean checkpw = BCrypt.checkpw("123456", "$2a$10$rkB/70Cz5UvsE7F5zsBh8O2EYDoGus3/AnVrEgP5cTpsGLxM8iyG6");
  • 返回值为true,表示密码匹配成功

  • 返回值为false,表示密码匹配失败

  1. 新增用户-密码加密

我们知道了密码加密之后,当创建用户的时候,就需要给用户设置默认的密码

  • 默认密码为:888itcast.CN764%...

  • 存储到数据库之后为加密之后的密文,效果如下:

    img

String password = "888itcast.CN764%...";
user.setPassword(BCrypt.hashpw(password,BCrypt.gensalt()));
 
posted @   灵泽pro  阅读(282)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示