我已经使用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每次都没有使用相同的基本密码返回相同的值,但它始终能够匹配它。我想确保我遵循处理密码的有效(且最重要的是安全)方法。
答案 0 :(得分:0)
有几件事:
您可以使用以下内容创建字符串购买的哈希:new Sha256Hash(password, salt)
如果您的用户存储了多个位置,则每个商店可能应该有不同的领域。