【问题标题】:Encryption method for storing passwords in database [duplicate]在数据库中存储密码的加密方法[重复]
【发布时间】:2012-02-16 02:36:26
【问题描述】:

可能重复:
What function to use to hash passwords in MySQL?
Secure password storage

在密码加密后将密码存储到数据库中的最佳机制是什么? Java中的加密方法和实现是什么?

【问题讨论】:

标签: java database encryption passwords password-protection


【解决方案1】:

从不存储加密密码。而是存储一个安全的单向哈希,例如 SHA-1(有一些小的安全问题),或者一个更新的、更安全的变体。

这样做实际上违反了您可能需要遵守的多项监管要求,例如,如果您涉及信用卡(从事任何电子商务?),则需要遵守 PCI DSS。

http://www.mindrot.org/projects/jBCrypt/ 之类的东西也可能很有用。

+1 表示 Borealid 的评论 - 即使使用散列,散列也需要正确完成,并且必须包括“salt”(额外的随机数据以防止一部分攻击)。 jBCrypt 将为您执行此操作(其他类似的库也是如此)。

【讨论】:

  • 那么我应该使用哪种方式或算法作为最佳解决方案?
  • 请不要存储裸密码的哈希值。添加一些东西,使这个特定的哈希在攻击其他网站时毫无价值,并抵抗彩虹表攻击。
【解决方案2】:

存储密码的常用方法是使用消息摘要算法对密码进行哈希处理。我推荐 SHA1,或者如果您需要更多字节(-> 更少的冲突),SHA256 或 512。这是 Java 中的 SHA1 实现:

http://www.anyexample.com/programming/java/java_simple_class_to_compute_sha_1_hash.xml

还建议您使用盐来使密码哈希变得更加困难。说明:

http://en.wikipedia.org/wiki/Salt_(cryptography)

【讨论】:

  • 你可能应该提到盐。已经有足够的无盐密码了,非常感谢。
猜你喜欢
  • 2013-01-25
  • 2020-03-20
  • 2013-10-04
  • 2012-09-25
  • 2012-04-07
  • 2014-04-09
  • 2011-04-26
  • 2011-12-25
  • 1970-01-01
相关资源
最近更新 更多