我已经尝试了一段时间,但找不到答案......我是这个话题的新手,所以如果它是一个基本问题,我深表歉意......
如何安全存储用户密码并让用户登录?
所以第一次用户注册时,我将对密码进行哈希+加盐并将其存储到数据库中。现在,当用户登录时,我如何检查用户是否输入了正确的密码?解密安全密码(来自数据库)然后将其与用户输入的密码进行比较没有意义吗?因为如果我可以解密它,任何人都可以...保护密码然后比较解码的密码不起作用,因为它们返回不同的值。这是我的用户注册代码:
String salt = "random232andString";
byte[] bSalt = base64ToByte(salt);
byte[] pass = null;
// pass should be what will be saved to the DB.
pass = getHash("pppppp", bSalt); //user is instance of User class.
private byte[] getHash(String password, byte[] salt) throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.reset();
digest.update(salt);
byte[] securePassword = digest.digest(password.getBytes("UTF-8"));
return securePassword;
}
public static byte[] base64ToByte(String data){
BASE64Decoder decoder = new BASE64Decoder();
byte[] decoded = null;
try {
decoded = decoder.decodeBuffer(data);
} catch (IOException e) {
e.printStackTrace();
}
return decoded;
}
每次我传递密码“pppppp”和上面的盐时,它都会返回不同的安全代码,比如 [B@2430f369. 那么如何将用户输入的密码与数据库中的密码匹配呢?希望这是有道理的......提前谢谢