【SpringSecurity-02】PasswordEncoding

PasswordEncoding的加密算法

Hash算法

  • 单向算法
  • hash值(密码)不可逆

下面是PasswordEncoding接口的源码

package org.springframework.security.crypto.password;

public interface PasswordEncoder {
    String encode(CharSequence var1);	//用于给密码加密

    boolean matches(CharSequence var1, String var2);	//用于校验密码

	//判断加密之后的密码是否需要重新加密,需要返回true,不需要返回false
    default boolean upgradeEncoding(String encodedPassword) {
        return false;
    }
}

BCryptPasswordEncoder测试

	@Test
	void bCryptPasswordTest(){
		BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
		String rawPassword = "123456";
		String encodePassword = passwordEncoder.encode(rawPassword);

		System.out.println("原始密码" + rawPassword);
		System.out.println("加密之后的hash密码:" + encodePassword);

		System.out.println(rawPassword + "是否匹配" + encodePassword + ":"
				+ passwordEncoder.matches(rawPassword, encodePassword));
		System.out.println("654321是否匹配" + encodePassword + ":"
				+ passwordEncoder.matches("654321", encodePassword));
	}

结果如下:
【SpringSecurity-02】PasswordEncoding
【SpringSecurity-02】PasswordEncoding
发现对于同一个密码,两次加密后的结果都不一样。防止黑客利用常用密码表对秘密进行破解!

对加密后的密码进行分析

分为如下四个部分
$2a		//表示BCrypt算法的版本
$10		//表示算法的强度
$iT3kmqT9Ob2TxVvQgN/N3O		//随机盐
tJJ4GlePNoIgOjGpc6tR/KY/GuFfQq.		//hash值
上一篇:Spring Security 用户配置


下一篇:SpringSecurity---基于内存的FormLogin