使用BCrypt加密的时候遇到这个错误,查了很多资料。发现可能盐值必须有特定的格式才行,如果是用户随机输入的,可能会导致加密过程变得不可控,所以没有办法解密。
因此解决这个问题的办法是让BCrypt自己生成盐值。
下面是源代码(报错了):
@Test
void testBCrypt() {
String pw = BCrypt.hashpw("123", BCrypt.gensalt());
String pw2 = BCrypt.hashpw("123", "ni");
String pw3 = BCrypt.hashpw("123", "ni");
System.out.println(pw);
System.out.println(pw2);
System.out.println(pw3);
改成下面这个,就不错了。
String pw = BCrypt.hashpw("123", BCrypt.gensalt());
String pw2 = BCrypt.hashpw("123", BCrypt.gensalt());
String pw3 = BCrypt.hashpw("123", BCrypt.gensalt());
System.out.println(pw);
System.out.println(pw2);
System.out.println(pw3);
或者改成这样
String pw = BCrypt.hashpw("123", BCrypt.gensalt());
System.out.println(BCrypt.gensalt());
String pw2 = BCrypt.hashpw("123", "$2a$10$WN.h2KCJrffDF2S6yuAAhe");
String pw3 = BCrypt.hashpw("123", "$2a$10$WN.h2KCJrffDF2S6yuAAhe");
System.out.println(pw);
System.out.println(pw2);
System.out.println(pw3);