密码加密
MD5:大数据碰撞,不能纯数字,要大小写,要多少位,多次对同一个明文加密,密文是一样的
BCrypt比MD5更安全,因为其内部引入的加盐(29个字母的随机字符串)机制,每次加密结果都不一样
generate 生成(gen)
salt 盐
hash 拼凑
check 核对
BCrypt快速入门
public class TestBcrypt {
public static void main(String[] args) {
String gensalt = BCrypt.gensalt(); -->获取盐
String saltPassword = BCrypt.hashpw("123456", gensalt); -->加密
boolean checkpw = BCrypt.checkpw("123456", saltPassword); -->校验
System.out.println("密码校验结果:"+checkpw);
}
}
新增管理员时对密码加密保存
修改changgou_service_system项目的AdminServiceImp
@Override
public void add(Admin admin){
String gensalt = BCrypt.gensalt(); -->获取盐
String hashpw = BCrypt.hashpw(admin.getPassword(), gensalt); -->加密
admin.setPassword(hashpw); -->重置密码
adminMapper.insert(admin); -->添加用户
}
管理员登录校验密码
1.AdminService 新增方法
boolean login(Admin admin);
2.AdminServiceImpl 实现此方法
@Override
public boolean login(Admin admin) {
Admin admin1 = new Admin(); -->创建对象
admin1.setLoginName(admin.getLoginName()); -->设置对象的用户名
admin1.setStatus("1"); -->设置对象的状态码
Admin adminResult = adminMapper.selectOne(admin1); -->精确查找用户
if (adminResult == null){
return false;
}else{
-->校验密码
return BCrypt.checkpw(admin.getPassword(),adminResult.getPassword());
}
}
3.AdminController 新增方法
@PostMapping("/login") -->用户登录必须用post请求
public Result login(@RequestBody Admin admin){
boolean result = adminService.login(admin);
if (result){
return new Result(true, StatusCode.OK,"登录成功");
}else{
return new Result(false, StatusCode.ERROR,"登录失败");
}
}
加密算法<拓展了解>
*可逆加密算法:加密后, 密文可以反向解密得到密码原文
+对称加密:文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥
--用途: 一般用于保存用户手机号、身份证等敏感但能解密的信息。
--常见的对称加密算法有: AES、DES、3DES、Blowfish、IDEA、RC4、RC5、RC6、HS256
+非对称加密:两个密钥:公开密钥(publickey)和私有密钥,公有密钥加密,私有密钥解密
--用途: 一般用于签名和认证。私钥服务器保存, 用来加密, 公钥客户拿着用于对于令牌或者签名的解密或者校验使用.
--常见的非对称加密算法有: RSA、DSA(数字签名用)、ECC(移动设备用)、RS256 (采用 SHA‐256 的 RSA 签名)
*不可逆加密算法:加密后,就不能反向解密得到密码原文, MD5、SHA、HMAC
Base64编码:Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。Base64编码可用于在 HTTP环境下传递较长的标识信息。采用Base64编码解码具有不可读性,即所编码的数据 不会被人用肉眼所直接看到。注意:Base64只是一种编码方式,不算加密方法。