StandardPasswordEncoder encoder = new StandardPasswordEncoder("secret");
String result = encoder.encode("myPassword");
assertTrue(encoder.matches("myPassword", result));
这一点都很清楚,但在数据库中我只存储一个VARCHAR密码字段,存储由salt连接的散列值?这很简单吗?
答案 0 :(得分:1)
在数据库中,您应该存储endocer.encode
的返回值。
只存储一个VARCHAR密码字段,存储由salt连接的散列值?
这是错误的(或者可能只是不能正确书写),正确的是:
hash(password+salt)
但不是相反hash(password)+salt
!
人们说不要将密码存储为纯文本,但是哈希密码仍然是普通的文本
人们意味着您不应该按原样存储密码(普通),但当然您可以将哈希存储在文本表示中。 - 人们谈论的问题是,如果有人访问数据库,他就不应该读取密码来使用它们。如果您认为将密码存储为哈希(例如md5)不够安全,因为众所周知的md5 - 明文表,那么之前添加一个盐,并希望密码+盐不在该表中。