代码之家  ›  专栏  ›  技术社区  ›  Sergio Tapia

表中的密码字段应该使用什么;MD5还是SHA1?

  •  5
  • Sergio Tapia  · 技术社区  · 14 年前

    我决不是一个安全专家,甚至不是一个新手。我充其量只是个保安新手。

    有人建议我使用SHA1而不是MD5-为什么我要选择一个呢?一个更安全吗?

    7 回复  |  直到 14 年前
        1
  •  10
  •   Andras Zoltan    14 年前

    我至少会使用SHA2(256)-但是:

    由于以下原因,在数据库中对密码进行哈希运算几乎没有意义 rainbow table

    Password Stretching 它使用一个随机的salt以及一个随机(高)的迭代次数,因此尝试对每个密码进行暴力攻击所需的时间要长得多,因此在物理上更难破解所有密码。

    : Rfc2898DeriveBytes Class

    在MD5上

        2
  •  3
  •   Jordan    14 年前

    MD5和SHA1都被认为是不安全的,SHA-1更好。但是,有两件事你应该考虑:

    1. 因为您正在创建一个散列,所以黑客很容易通过填充一个充满常用密码的表,并通过相同的散列算法来确定数据库的密码,而不管您使用哪种算法。这叫做彩虹桌。

    约翰:527bd5b5d689e2c32ae974c6229ff785

    因此,如果你只是MD5你的密码,而有人天真到可以把它作为他们的密码,那么如果黑客控制了你的数据库并在彩虹表上运行它,那么它可能会受到危害。

    但是,如果你给每个预先散列的值加上一些乱码,比如“password12345”和“johnxyz”,那么你会得到2个完全不同的散列,它们与上面的不同。这称为salt值,它会阻止彩虹表发挥同样的效果。

    我的建议是使用最高级别的SHA算法,您可以在您的编程语言中使用该算法,并使用哈希密码对存储在数据库记录中的salt值(如果您愿意,可以通过哈希当前时间来创建一个“随机”值)进行哈希。

    数据库列:Username | Password | Salt

    这不是任何人想到过的最安全的系统,但它很可能适用于您的系统。

        3
  •  1
  •   Ian P    14 年前

    祝你好运。

        4
  •  1
  •   Janus Troelsen    14 年前

    存储便宜,处理器速度快。使用1千字节的salt和SHA-512。

        6
  •  0
  •   luggage    14 年前

    MD5已经被“破坏”,实际上,更高级别的安全性现在需要SHA-2。这是一本很有趣的书 http://en.wikipedia.org/wiki/MD5

    编辑:晚9秒:)

        7
  •  -1
  •   Jay    14 年前

    SHA2 . 谢尔有一些新的想法 alternatives