我已经使用Apache Shiro构建了一个自定义域来说明我们的应用程序有多个用户帐户和存储密码的位置 . 最初我使用Shiro来哈希并匹配密码,但自定义领域意味着我必须手动完成其中的一些操作 .
看了之后我发现了这段代码:
public String sha256(String base) {
try{
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(base.getBytes("UTF-8"));
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < hash.length; i++) {
String hex = Integer.toHexString(0xff & hash[i]);
if(hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
} catch(Exception ex){
throw new RuntimeException(ex);
}
}
我添加了一个盐,它工作得很好,所以我想知道我是否可以在创建用户名\密码对时将返回的值存储在数据库中,然后检索它以匹配提供的密码(加上盐) . 这似乎应该可行,但是当我之前使用Shiro执行此操作时,SHA256密码hasher每次都没有使用相同的基本密码返回相同的值,但它始终能够匹配它 . 我想确保我遵循处理密码的有效(且最重要的是安全)方法 .
1 回答
一些事情:您可以使用以下内容创建字符串购买的哈希:
new Sha256Hash(password, salt)
看看this example
如果您的用户存储了多个位置,则每个商店可能应该有不同的域 .