gpt4 book ai didi

java - Play Framework 2 存储用户密码哈希的最佳方式

转载 作者:IT老高 更新时间:2023-10-28 20:51:26 27 4
gpt4 key购买 nike

我的应用中有一个添加用户选项。我想将用户传递以哈希格式存储在数据库中。密码以纯文本格式存储在框架附带的示例代码中。经过一番搜索,我发现在 play2 中实现了 Crypto.encryptAES() 函数,可用于保护密码。

我的问题是使用它的最佳位置是什么?以及如何使用它来创建最可维护的代码?

最佳答案

我个人会在 User 模型中这样做。我的字段有 setter/getter ,所以在 setPassword 方法中:

this.password = HashHelper.createPassword(password); 

Hashhelper 只是一个用于多用途散列的单例类。

在 Hashelper 中我使用 BCrypt,只需将以下内容添加到 Build.scala

org.mindrot" % "jbcrypt" % "0.3m

加密看起来像:

/**
* Create an encrypted password from a clear string.
*
* @param clearString
* the clear string
* @return an encrypted password of the clear string
* @throws AppException
* APP Exception, from NoSuchAlgorithmException
*/
public static String createPassword(String clearString) throws AppException {
if (clearString == null) {
throw new AppException("empty.password");
}
return BCrypt.hashpw(clearString, BCrypt.gensalt());
}

解密看起来像:

/**
* Method to check if entered user password is the same as the one that is
* stored (encrypted) in the database.
*
* @param candidate
* the clear text
* @param encryptedPassword
* the encrypted password string to check.
* @return true if the candidate matches, false otherwise.
*/
public static boolean checkPassword(String candidate, String encryptedPassword) {
if (candidate == null) {
return false;
}
if (encryptedPassword == null) {
return false;
}
return BCrypt.checkpw(candidate, encryptedPassword);
}

我喜欢让我的 Controller 尽可能简单,因为我认为我的 Controller 就像用户操作和业务模型(在我的模型内部!)之间的流量 Controller 。

关于java - Play Framework 2 存储用户密码哈希的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15657062/

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