简介
在实际开发过程中经常会有数据传输加密解密或者密码加密的需求,本文主要汇总相关加密解密内容
加密算法
密码加密
在注册用户的需求中,需要将密码进行加密后存入数据库,常见的加密方式有:BCrypt加密和MD5加密
BCrypt 加密 【推荐】
【Demo篇】
package com.it.demo;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
public class BCryptPasswordDemo {
public static void main(String[] args) {
String rawPassword = "123456";
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
String encodedPassword = bCryptPasswordEncoder.encode(rawPassword);
System.out.println("第1次BCrypt加密结果: " + encodedPassword);
boolean flag = bCryptPasswordEncoder.matches(rawPassword, encodedPassword);
System.out.println("第1次BCrypt密码校验: " + flag);
encodedPassword = bCryptPasswordEncoder.encode(rawPassword);
System.out.println("第2次BCrypt加密结果: " + encodedPassword);
flag = bCryptPasswordEncoder.matches(rawPassword, encodedPassword);
System.out.println("第2次BCrypt密码校验: " + flag);
}
}
通过控制台日志可以看出:相同的密码每次加密的结果是不同的,这样可以有效的防止“彩虹表”撞库破解,所以推荐此方式进行密码加密
【实战篇】
实际开发过程中,都是使用spring进行对象的管理
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
public class PasswordEncoderConfig {
@Bean
public PasswordEncoder passwordEncoder(){
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
}
PasswordEncoderFactories.createDelegatingPasswordEncoder()
源码:
public class PasswordEncoderFactories {
public static PasswordEncoder createDelegatingPasswordEncoder() {
String encodingId