我试图更好地了解哈希和加密,但是我偶然发现了一些我似乎无法在Google中找到的问题,因为Google一直在提供我已经阅读过的哈希和加密的基本区别。
在StackOverflow中有很多人问,他们对加密和哈希之间的区别一无所知,因此成为SO搜索引擎的头等大事。这不能回答我的问题,也不能帮助我。因此,我想确保有关哈希密码和加密密码的一些事情。
现在,我想保护新的注册用户。
获得密码的“安全”形式后,我对其进行哈希处理。
$safePassword; // Already filled with safe password.
$hash = password_hash($safePassword,PASSWORD_ARGON2I);
然后将其插入数据库。
现在这是提出问题的地方。
我还需要加密哈希密码吗?
如果是,如何安全地加密密码? (我将使用AES)
AES_ENCRYPT(str, key_str);
str
是我们要加密的字符串,key_str
是加密密钥。
另一个问题出现了
key_str
的安全,以便可以将其用于进一步的使用(用于身份验证)?答案 0 :(得分:3)
您不需要需要加密密码,就像您在问题中所包含的那样,只需通过密码哈希来运行即可。哈希是一种单向操作,因此“不可能”反转哈希并获得原始密码。
在对密码进行哈希处理后对密码进行加密不会使安全性降低,也实际上并不能使安全性更高。它还引入了更多问题-在哪里保存密钥?
仅粘贴到Argon2,就不需要进一步的操作了。
答案 1 :(得分:2)
现在,我想保护新的注册用户。
- 我需要先对其进行过滤。 (由于不相关而略过)
如果使用“过滤器”,则表示您以某种方式更改了此密码。...否!不仅不需要这样做,而且实际上会使您日后头疼不已上路,并降低了密码的安全性。
现在这是提出问题的地方。
- 我还需要加密哈希密码吗?
不。散列是一种单向功能。您无法从其哈希中恢复密码。 (您可以使用彩虹表,该表实际上是导致某些哈希的密码列表。这就是适当的盐有助于防止的内容。)
加密此哈希值不会获得任何好处。
另一个问题出现了
- 如何确保key_str的安全,以便可以将其用于进一步的使用(用于身份验证)?
这实际上是加密无用的关键原因。要使用它,您需要对其解密,这意味着密钥必须与散列数据放在第一位。