如何使用Spring StandardPasswordEncoder?

时间:2011-10-15 19:41:04

标签: spring encoding

StandardPasswordEncoder encoder = new StandardPasswordEncoder("secret");
String result = encoder.encode("myPassword");
assertTrue(encoder.matches("myPassword", result));

这一点都很清楚,但在数据库中我只存储一个VARCHAR密码字段,存储由salt连接的散列值?这很简单吗?

1 个答案:

答案 0 :(得分:1)

在数据库中,您应该存储endocer.encode的返回值。

  

只存储一个VARCHAR密码字段,存储由salt连接的散列值?

这是错误的(或者可能只是不能正确书写),正确的是:

  • 在第一步中,Salt被添加到密码
  • 在第二步中,计算哈希值(来自盐渍密码)

hash(password+salt)

但不是相反hash(password)+salt


  

人们说不要将密码存储为纯文本,但是哈希密码仍然是普通的文本

人们意味着您不应该按原样存储密码(普通),但当然您可以将哈希存储在文本表示中。 - 人们谈论的问题是,如果有人访问数据库,他就不应该读取密码来使用它们。如果您认为将密码存储为哈希(例如md5)不够安全,因为众所周知的md5 - 明文表,那么之前添加一个盐,并希望密码+盐不在该表中。