首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么不在PHP中使用AES进行密码加密?

为什么不在PHP中使用AES进行密码加密?
EN

Stack Overflow用户
提问于 2010-06-30 04:02:48
回答 4查看 10.7K关注 0票数 18

无论我在哪里看到人们谈论在数据库中存储密码,他们几乎总是使用MD5。

AES或SHA1有什么问题?

EN

回答 4

Stack Overflow用户

发布于 2010-06-30 04:07:31

MD5 (Message-Digest algorithm 5)是一种加密哈希函数,而Advanced Encryption Standard (AES)是一种对称密钥加密算法,因此它们用于不同的目的。像MD5或SHA这样的散列用于验证密码,因为它很难反转,也就是从散列字符串中获取密码。另一方面,AES加密是可逆的,如果您知道密钥,则可以获得原始消息。因此,如果多个消息使用相同的密钥加密,知道它会暴露所有消息,而如果您设法找到散列的原始字符串(彩虹表等),则您只发现了该特定实例的纯文本,并且您必须重做此工作以找到另一个散列字符串的解决方案。

票数 6
EN

Stack Overflow用户

发布于 2010-06-30 05:09:16

简而言之: AES是可逆的。散列函数不是。

作为对被接受的答案的回应...(对不起,我是新用户,还不能发表评论...)加盐只会阻止基于彩虹表的攻击。它不保护“弱密码”。要保护较弱的密码,您需要使用已被证明速度较慢的散列函数。正确配置的bcrypt是完成此操作的最简单方法。MD5和SHA1速度太快,不安全。(与MD5发现的冲突与我描述的这个问题无关)

所有使用MD5或SHA1加密的8字符密码(即使正确加盐)都可以被this dude in a single day破解。加盐并不能防止这种攻击。“优化”攻击,使其只包含英语中的~500k个单词...它们的10,000个最常见的变体将破解大量的密码。

BCrypt对这类攻击的抵抗力更强,因为它(可以配置为)比MD5慢数百万倍。从理论上讲,反复使用MD5一百万次也能达到同样的效果,但我建议您坚持使用经过良好测试的库,而不是使用自己的实现。当然,BCrypt也使用Salting,并且在大多数编程语言中都可用。所以没有理由不使用它。

从理论上讲,SCrypt更好,但它太新了(因此,实现可能仍然有一点but )

长话短说:SHA512 vs. Blowfish and Bcrypt

票数 5
EN

Stack Overflow用户

发布于 2010-06-30 04:09:51

因为AES加密是对称的。给定一个使用AES加密的密码和密钥,您可以解密该密码。这是不可取的,因为您几乎总是希望只有密码的所有者知道它,而不希望有一种简单的方法来派生密码。另一方面,SHA和MD5算法(主要)执行密码的单向转换。没有一段信息(密钥)允许您将转换后的密码返回到其明文形式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3144283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档