package test.demo;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;
import org.apache.commons.codec.binary.Base64;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
public class TestDemo {
private static BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
/**
* md5加密
* @param src
* @return
*/
public static String md5(String src){
try {
//获取MD5对象
MessageDigest md = MessageDigest.getInstance("MD5");
//加密处理
byte[] output = md.digest(src.getBytes());
//利用Base64转换成字符串结果
String str = Base64.encodeBase64String(output);
return str;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new RuntimeException("加密失败",e);
}
}
/**
* BCryptPasswordEncoder加密
* @param src
* @return
*/
public static String bCryptEncode(String src){
return passwordEncoder.encode(src);
}
/**
* BCryptPasswordEncoder密码匹配
* @param inputPassword 用户输入的密码 例如: admin
* @param newPassword 数据库里面存的密码 例如: $2a$10$pR.wkBRDA0S30LcM0ecOi.J.4erkJeEfAUYexD6Nf7Nc3LSASkfS6
*
* @return
*/
public static boolean bCryptMatch(String inputPassword, String oldPassword){
return passwordEncoder.matches(inputPassword, oldPassword);
}
/**
* 生成UUID
* java中的UUID为36位不重复字符串(32位+4个"-"号)
* 数据库中也有UUID为362位不重复字符串
* 一般用于主键
*/
public static String createId(){
UUID uuid = UUID.randomUUID();
return uuid.toString();
}
//测试
public static void main(String[] args) {
System.out.println("密码admin加密后:"+md5("admin"));//ISMvKXpXpadDiUoOSoAfww==
System.out.println("密码:"+md5("admin").length());
System.out.println("自动生成UUID主键:"+createId());
System.out.println("主键长度:"+createId().length());
System.out.println("==================");
String password = "admin";//密码
String s = bCryptEncode(password);
System.out.println("加密后:"+ s);
//与用户输入的密码匹配
String input = "admin";
System.out.println(bCryptMatch(input, s));
}
}
注意:Base64需要导包:commons-codec 1.10
BCryptPasswordEncoder也需要导包如下
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
测试结果第一次:
密码admin加密后:ISMvKXpXpadDiUoOSoAfww==
密码:24
自动生成UUID主键:5ef83bcc-f44e-41e8-a7a4-39632c4c4059
主键长度:36
==================
加密后:$2a$10$sDm5Fdnyyvh7p8o7iY8Sbu8r92X14KlM8Z22YW5Y3ioLOSrUHIkGu
true
测试结果第二次:
密码admin加密后:ISMvKXpXpadDiUoOSoAfww==
密码:24
自动生成UUID主键:7950394d-a45c-4bb4-a531-abefa30ac40d
主键长度:36
==================
加密后:$2a$10$i5NDOYIOyQVYReYUK7e6EuL4G/56SZN3oltjcqO1L7R.8hqAcnT3m
tru
md5对于同一个密码,加密后的值都是相同的,而BCryptPasswordEncoder加密后对于同一个密码,加密后的值均不同