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

2022-08-30 21:41:05

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

AES 或 SHA1 有什么问题?


答案 1

如果存储加密的密码,则可以对其进行解密。由于许多人在许多不同的系统中重复使用密码,因此这是一件坏事。因此,您使用单向函数,加密哈希函数 - 这样就可以验证密码而不会实际泄露。

正如Greg所评论的那样,AES是一种加密/解密算法。MD5 和 SHA 系列是哈希函数,它们更适合使用。但是现在要避开MD5 - 它不再被视为足够安全。王晓云在2005年发表了一项针对它的有效碰撞攻击,现在它的力量被认为远低于其设计强度 - 因此在密码学术语中它是“破碎的”。

为了获得最佳结果,标准是加盐和散列密码以存储它 - 谷歌这些术语串联起来,你会发现大量的参考资料。


答案 2

MD5(消息摘要算法 5)是一个加密哈希函数,而高级加密标准 (AES) 是一个对称密钥加密算法,因此它们用于不同的目的。哈希(如 MD5 或 SHA)用于验证密码,因为它很难反转,也就是说,从哈希字符串中获取密码。另一方面,AES加密是可逆的,如果您知道密钥,则可以获得原始消息。因此,如果使用相同的密钥对多条消息进行加密,则知道它会公开所有消息,而如果您设法找到哈希的原始字符串(彩虹表等),则您只发现了该特定实例的纯文本,并且您必须重做工作才能找到另一个哈希字符串的sllution。


推荐