我在应用程序中使用 shiro 进行身份验证。我使用带盐的散列密码,并将它们存储在我的数据库中,如下所示:
private User createUserWithHashedPassword(String inName, String inFirstName, String inLastName, String inPassword){
ByteSource salt = randomNumberGenerator.nextBytes(32);
byte[] byteTabSalt = salt.getBytes();
String strSalt = byteArrayToHexString(byteTabSalt);
String hashedPasswordBase64 = new Sha256Hash(inPassword, salt, 1024).toBase64();
return new User(inName,inFirstName,inLastName,hashedPasswordBase64,strSalt);
}
我将盐与字符串一起存储在我的数据库中。现在在我的领域中,我想从数据库中取回我的数据,为此我使用了事务服务。但是我的盐是强的,所以我希望它使用静态方法返回为 ByteSource 类型:
ByteSource byteSourceSalt = Util.bytes(salt); //where the salt is a String
但是当我创建我的 SaltedAuthenticationInfo 时,它不会进行身份验证。
我认为我的问题来自我的转换方法:
private String byteArrayToHexString(byte[] bArray){
StringBuffer buffer = new StringBuffer();
for(byte b : bArray) {
buffer.append(Integer.toHexString(b));
buffer.append(" ");
}
return buffer.toString().toUpperCase();
}
谢谢你的帮助。