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

Java 如何在Ktor中散列和验证密码?,java,gradle,kotlin,password-hash,ktor,Java,Gradle,Kotlin,Password Hash,Ktor,我是Kotlin和Ktor的新手,当我尝试为我的web应用程序实现身份验证时,我需要为用户存储密码。然而,我似乎找不到一种通过Ktor核心或外部java依赖项来散列密码并验证密码的方法 我找到了一些关于如何使用BCrypt或PBKDF2进行散列的文章,但这些文章要求我自己进行散列实现,这似乎不安全,因为我将不得不担心如何维护它 有没有办法通过Ktor散列密码并进行验证?(类似于PHP的password\u hash()和password\u verify()) 如果没有,你能推荐一个声誉良好且

我是Kotlin和Ktor的新手,当我尝试为我的web应用程序实现身份验证时,我需要为用户存储密码。然而,我似乎找不到一种通过Ktor核心或外部java依赖项来散列密码并验证密码的方法

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

  • 有没有办法通过Ktor散列密码并进行验证?(类似于PHP的
    password\u hash()
    password\u verify()
  • 如果没有,你能推荐一个声誉良好且维护良好的Gradle依赖关系吗
  • 或者,我如何进行自定义实现并确保其安全
我曾经这样使用过:

import org.mindrot.jbcrypt.BCrypt
...
fun setPassword(user: User) {
   user.passwordHash = BCrypt.hashpw(password, BCrypt.gensalt())
}
build.gradle添加:

// current jbcrypt_version is 0.4
compile group: 'org.mindrot', name: 'jbcrypt', version: jbcrypt_version
创建用户数据库记录时,按如下方式保存密码哈希:

import org.mindrot.jbcrypt.BCrypt
...
fun setPassword(user: User) {
   user.passwordHash = BCrypt.hashpw(password, BCrypt.gensalt())
}
检查密码时:

user = findUserByUsername(username=usernameToCheck)
if (!user)
    return ...
if (!BCrypt.checkpw(user.passwordHash, passwordToCheck))
    return ...
// user/password validated
注意:jBCryptsalt与一些元数据一起保存在密码散列中。例如:

salt=$2a$10$e9kAuRN/PARzXnNdnghiSO
hash=$2a$10$e9kAuRN/PARzXnNdnghiSOjfShrH9rrGQtfrAIj06LZ7ZW1MW7bEy

以下是bcrypt的Java库:。自述文件中有很多关于如何正确使用它的信息。这似乎不适用于使用PHPpass的wordpress。编译是过时的,您应该使用实现