gpt4 book ai didi

grails - 使用 Spring Security 编码密码的问题

转载 作者:行者123 更新时间:2023-12-02 17:29:11 26 4
gpt4 key购买 nike

我正在使用 grails 2.3.0,并在使用 spring security 对密码进行编码时遇到奇怪的问题:

这是我对密码进行编码的方法:

String encodePassword(String password) {
return springSecurityService.encodePassword(password)
}

并像这样使用

log.debug encodePassword("mkb")
log.debug encodePassword("mkb")
log.debug encodePassword("mkb")

我对同一个密码进行了多次编码,每次都得到不同的编码密码。

日志:

$2a$10$h8T4BxgOeozmH/VSPJl7NeTaF2P0iONpSdqDN7dDFFAG.sy8WG/8K
$2a$10$a7qybaiLF/eNrTSwFohjkezNaJTTDdMEinRYKjxDzEt.OoxaIgFOu
$2a$10$nZVhUT0QTmmbtt22CPtM..cLxU252RGBIMkd5aSd2AFXNTNLQ./6u

最佳答案

没关系。看起来您正在使用 BCrypt 密码哈希,该算法在每次编码密码时使用随机盐(其他哈希算法使用“盐源属性”,如 id)。该盐被添加到哈希之前

所以你有:

  • $2a - 盐版本
  • $10 - 回合
  • $h8T4BxgOeozmH/VSPJl7NeTaF2P0iONpSdqDN7dDFFAG.sy8WG/8K - 用于 salt+hash 的 Base64,其中 salt 获取前 24 个字符,hash 获取其余字符:
    • h8T4BxgOeozmH/VSPJl7NeTaF - 盐
    • 2P0iONpSdqDN7dDFFAG.sy8WG/8K - 哈希(盐 + 密码 10 轮)

请参阅 Spring Security 的 BCrypt 来源:https://github.com/spring-projects/spring-security/blob/master/crypto/src/main/java/org/springframework/security/crypto/bcrypt/BCrypt.java

如果您需要手动检查用户密码,则必须使用passwordEncoder,例如:

//dependency injection
def passwordEncoder

//validate
String enteredPassword = params.password
User user = ...
if (!passwordEncoder.isPasswordValid(user.password, enteredPassword, null)) { //validates raw password against hashed
//... wrong password entered
}

关于grails - 使用 Spring Security 编码密码的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19498310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com