【发布时间】:2017-09-26 21:02:29
【问题描述】:
我使用 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 密码散列器每次都没有使用相同的基本密码返回相同的值,但它始终能够匹配它。我想确保我遵循有效(最重要的是安全)的方法来处理密码。
【问题讨论】:
标签: java authentication shiro sha256