BCrypt加密
这个使用还是挺简单,而且每次生成的加密串都是不一致的,但只能是用加密前的密码跟BCrypt加密后的密码进行比较,所以得搭配sha加密或者其他的加密方式,这样库中存储sha加密后的值,然后前端进行sha加密,再将加密后的值通过bcrypt加密,发送到后端,后端通过库中sha加密的值跟前端二次加密后的值进行matches比较,相等就是true。
参考文档
前端使用
我用的vue
1.引入包
安装不上,就强制安装(加个 --force好像就行)
npm i bcryptjs
2.加密使用
就是import模块,登录的方法上加async,方法里面直接一行代码就行,
// 使用 bcrypt.js 进行密码加密
import bcrypt from 'bcryptjs';
const password = ref('')
const cost = 10;
const login = async () => {
// 前端加密密码
const hashedPassword = await bcrypt.hash(encryptSHA1(password.value), cost);
// 将用户名和加密后的密码发送到后端进行登录验证
// ...
}
export const encryptSHA1=(strSrc:any)=> {
const hash = CryptoJS.SHA1(strSrc);
return hash.toString();
}
后端加密
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2.禁止security拦截请求
不加这个,默认就会拦截所有的请求
@SpringBootApplication(exclude= {SecurityAutoConfiguration.class })
3.登录接口进行比较
后端就是直接拿库中sha加密的值,跟前端传递的值进行比较,至于后端sha咋加密参考上面的文档前后端都有
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
// user.getPassword()是通过查询库中获取的sha加密的值,password是前端传递过来的通过sha加密,再进行BCrypt加密的值
if (!passwordEncoder.matches(user.getPassword(), password)){
//抛出异常
}