Ema*_*mar 8 java password-hash gradle kotlin ktor
我是 Kotlin 和 Ktor 的新手,当我尝试为我的 Web 应用程序实现身份验证时,我需要存储用户的密码。但是,我似乎无法通过 Ktor Core 或外部 java 依赖项找到一种方法来哈希密码并验证它们。
我发现了一些关于如何使用 BCrypt 或 PBKDF2 进行散列的文章,但这些文章要求我自己进行散列实现,这似乎不安全,因为我将不得不担心维护它。
password_hash()和password_verify())我这样使用jBCrypt :
build.gradle 添加:
// current jbcrypt_version is 0.4
compile group: 'org.mindrot', name: 'jbcrypt', version: jbcrypt_version
Run Code Online (Sandbox Code Playgroud)
创建用户数据库记录保存密码哈希,如下所示:
import org.mindrot.jbcrypt.BCrypt
...
fun setPassword(user: User) {
user.passwordHash = BCrypt.hashpw(password, BCrypt.gensalt())
}
Run Code Online (Sandbox Code Playgroud)
检查密码时:
user = findUserByUsername(username=usernameToCheck)
if (!user)
return ...
if (!BCrypt.checkpw(user.passwordHash, passwordToCheck))
return ...
// user/password validated
Run Code Online (Sandbox Code Playgroud)
注意:jBCrypt salt 与密码哈希中的一些元数据一起保存。例子:
salt=$2a$10$e9kAuRN/PARzXnNdnghiSO
hash=$2a$10$e9kAuRN/PARzXnNdnghiSOjfShrH9rrGQtfrAIj06LZ7ZW1MW7bEy
Run Code Online (Sandbox Code Playgroud)