如何在 Ktor 中散列和验证密码?

Ema*_*mar 8 java password-hash gradle kotlin ktor

我是 Kotlin 和 Ktor 的新手,当我尝试为我的 Web 应用程序实现身份验证时,我需要存储用户的密码。但是,我似乎无法通过 Ktor Core 或外部 java 依赖项找到一种方法来哈希密码并验证它们。

我发现了一些关于如何使用 BCrypt 或 PBKDF2 进行散列的文章,但这些文章要求我自己进行散列实现,这似乎不安全,因为我将不得不担心维护它。

  • 有没有办法通过 Ktor 来哈希密码并验证它们?(类似于 PHP 的password_hash()password_verify()
  • 如果没有,您能推荐一个声誉良好且维护良好的 Gradle 依赖项吗?
  • 或者我如何进行自定义实现并确保其安全?

Rob*_*ujo 4

我这样使用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)