Java MD5密码的每个字母值吗?

Java MD5密码的每个字母值吗?,java,login,passwords,char,md5,Java,Login,Passwords,Char,Md5,您好 我目前正在从事一个项目,其中涉及一个登录系统,旨在为设置尽可能安全 我想问的是,MD5字符数组中的每个元素(从密码字段获得)是否值得,通过它,您可以向每个字符元素添加一个salt,然后用MD5散列,完成后,添加每个字符的所有散列,然后向其中添加一个单独的salt,然后再次MD5它 这真的是安全的,还是过火了?那真的不安全了 一个更重要的选择是使用MD5以外的东西进行这种散列。MD5对暴力的攻击速度非常快(特别是在大规模并行硬件上,如图形卡),因此很容易破解(至少对于单个密码) 如果您使用更

您好

我目前正在从事一个项目,其中涉及一个登录系统,旨在为设置尽可能安全

我想问的是,MD5字符数组中的每个元素(从密码字段获得)是否值得,通过它,您可以向每个字符元素添加一个salt,然后用MD5散列,完成后,添加每个字符的所有散列,然后向其中添加一个单独的salt,然后再次MD5它


这真的是安全的,还是过火了?

那真的不安全了

一个更重要的选择是使用MD5以外的东西进行这种散列。MD5对暴力的攻击速度非常快(特别是在大规模并行硬件上,如图形卡),因此很容易破解(至少对于单个密码)


如果您使用更复杂的SHA-512,您将增加更多的安全性。

最好使用更流行的哈希算法,如。MD5中存在已知的漏洞(甚至更现代的SHA-1也存在一些漏洞)。

我觉得这不是一个好主意,使用MD5也不是。改用现代SHA算法(如SHA256)。

否-这根本不会让它更安全。如果你想让它更安全,那么就使用更好的散列算法,比如SHA1。

如果你想尽可能安全,就应该使用不同的散列算法,md5会受到一些冲突攻击


请看一看根本不安全,因为密钥空间只有255。在每个字母中添加一个salt只会在整个字符串中添加相同的salt,并且可能会减少哈希的熵,而不是增加它

正确的解决方案是使用适当的密码散列算法(如bcrypt、scrypt或pbkdf2),并避免编写自己的算法

MD5(以及SHA-1、SHA-2等)的速度非常快,无论怎样,暴力破解密码都非常容易

编辑 今天我们看到了一个很好的例子,说明了为什么:

然而,索尼自己编写了签名软件,每个签名都使用一个固定的数字

MD5密码的每个字母值吗

这会降低密码的安全性。要强行破解一个完整的密码,你需要尝试每个字母的每一个组合(或者有一本好的字典)。如果你一次加密一个字母,你只需要一次破解一个字母(这很琐碎)

我目前正在从事一个项目,其中涉及一个登录系统,旨在为设置尽可能安全

这是一项艰巨的任务。大多数侵入系统的人都有内幕知识,比如前雇员。我建议你要现实一点,在确保安全的过程中,你需要付出多大的努力

法老的陵墓工人也会安葬,以确保没有人知道陵墓的位置,然而,在非洲,只有一座陵墓被发现完好无损


您可以尝试使用种子SHA来提高安全性。

更好的哈希算法和良好的salt将是一个良好的开端。一旦黑客知道你在散列中放入了单个字符,那么解密就很容易了。 可以在几秒钟内生成单个字符的彩虹表;)

SHA-512可能是has算法的一个很好的替代方案。并且不要仅从密码生成哈希。也要用盐。这样你就可以非常安全地存储密码

如果您的密码需要从一个应用程序(客户端)发送到另一个(服务器),那么使用安全协议进行通信可能更为重要。

MD5有缺陷:

您的建议似乎只会将安全性增加O(n+1),其中n是密码长度,这是不够的


不要做这些乱七八糟的事情,你应该选择另一种更安全的哈希算法,比如SHA-256和SHA-512

我认为最好使用不同的算法,只要md5被破坏。@Ency:虽然我同意其他算法更好,但应该注意的是,md5只是在某些特定情况下被“破坏”。已知的冲突攻击(以MD5闻名)与密码哈希无关。听起来像是“通过模糊性实现安全性”(“如果我只是以一种奇怪的方式应用哈希,他们不会猜到如何恢复哈希!)哇!谢谢大家的快速回答!MD5一开始似乎是个好主意,但在所有这些关于它不安全的评论之后,看起来我必须使用不同的算法。谢谢。+1“避免编写自己的算法”是谈论安全/加密内容时的关键。NTLM做了(或做了)类似的东西。它最多允许14个字符的密码,但分为两部分。实际上,它将密码限制为7个字符(假设攻击知道散列值)。我相信这是暗示,但只是为了确保:无论采用何种算法,在对密码进行哈希运算之前,您仍应先对密码进行加盐。@Andy我推荐的算法都包括加盐。您必须会说法语。一点也不,我来自巴西:)