我的 Spring Security 项目中的 BCrypt (Spring security)

我该如何加密。这样在数据库中它就不会显示用户密码。我现在保存在数据库中 - 登录名和密码,用户角色。我需要密码必须在数据库中加密(BCrypt)


@Configuration

@EnableWebSecurity

public class SecurityConfig extends WebSecurityConfigurerAdapter {


    @Override

    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()

                .antMatchers("/admin/**").hasRole("ADMIN")

                .antMatchers("/user/**").hasRole("USER")

                .antMatchers("/**").permitAll()

                .and()

                .formLogin()

                .loginPage("/login")

                .defaultSuccessUrl("/allStudents")

                .and()

                .logout()

                .and()

                .csrf().disable();

    }


    @Bean

    public PasswordEncoder weDoNotWantEncryption() {

        return new PasswordEncoder() {

            @Override

            public String encode(CharSequence rawPassword) {

                return rawPassword.toString();

            }


            @Override

            public boolean matches(CharSequence rawPassword, String encodedPassword) {

                return rawPassword.toString().equals(encodedPassword);

            }

        };

    }


}


白板的微信
浏览 137回答 2
2回答

大话西游666

非常简单 - 只需将您的weDoNotWantEncryption()函数替换为返回 BCrypt 实例的函数:@Bean public PasswordEncoder passwordEncoder() {     return new BCryptPasswordEncoder(); }BCryptPasswordEncoder实现PasswordEncoder(顾名思义),因此已经为encode()和定义了好的方法matches()。请注意,这将(当然)使当前在您的数据库中的任何密码都无法使用,尽管鉴于这些密码以明文形式存储,我假设(并希望/祈祷)这是在测试环境中,而不是在生产环境中。

慕码人2483693

当我们加密存储密码时,我们通常对它们进行哈希处理,以便它是一种单向加密,即即使我们知道哈希算法,我们也无法从加密的密码中检索到原始密码。我们遵循的主要程序如下。取字符串“密码”向密码添加盐(一个随机字符串,以确保具有相同密码的多个用户没有相同的散列密码):随机盐:“A3fcherf42”,生成的字符串:“A3fcherf42password”使用加密算法散列此字符串,您可能会得到:“d143d1w132dd23dsgrg5”将盐附加到加密密码以供将来验证用户登录时使用:“A3fcherf42d143d1w132dd23dsgrg5”用用户id保存在数据库中现在验证用户登录:从登录表单中获取密码,即“密码”读取存储在数据库中的哈希值:“A3fcherf42d143d1w132dd23dsgrg5”从存储的散列密码中提取盐:“A3fcherf42”将盐附加到用户输入的密码:“A3fcherf42password”哈希密码,现在生成的哈希值应该与存储在数据库中的哈希值匹配。使用 Bcrypt 执行此操作是一个简单的过程,因为大部分工作都由库处理。我解释了上面的场景,以便您对幕后发生的事情有一个很好的理解。您执行以下操作以生成并保存散列密码。String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt());现在您有了散列字符串,将其存储到数据库中。当用户登录时,您获取他输入的密码、数据库存储的哈希字符串,并对其进行验证。if (BCrypt.checkpw(entered_pw, stored_hash))     return True;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java