散列密码后是否应该加密密码?如果是这样,如何正确执行呢?

时间:2018-12-18 03:41:16

标签: php encryption passwords aes argon2-ffi

我试图更好地了解哈希和加密,但是我偶然发现了一些我似乎无法在Google中找到的问题,因为Google一直在提供我已经阅读过的哈希和加密的基本区别。

在StackOverflow中有很多人问,他们对加密和哈希之间的区别一无所知,因此成为SO搜索引擎的头等大事。这不能回答我的问题,也不能帮助我。因此,我想确保有关哈希密码和加密密码的一些事情。

现在,我想保护新的注册用户。

  1. 我需要先对其进行过滤。 (由于不相关而被跳过)
  2. 获得密码的“安全”形式后,我对其进行哈希处理。

    $safePassword; // Already filled with safe password. $hash = password_hash($safePassword,PASSWORD_ARGON2I);

  3. 然后将其插入数据库。

现在这是提出问题的地方。

  1. 我还需要加密哈希密码吗?

  2. 如果是,如何安全地加密密码? (我将使用AES)

AES_ENCRYPT(str, key_str);

str是我们要加密的字符串,key_str加密密钥。

另一个问题出现了

  1. 如何确保key_str的安全,以便可以将其用于进一步的使用(用于身份验证)?

2 个答案:

答案 0 :(得分:3)

不需要需要加密密码,就像您在问题中所包含的那样,只需通过密码哈希来运行即可。哈希是一种单向操作,因此“不可能”反转哈希并获得原始密码。

在对密码进行哈希处理后对密码进行加密不会使安全性降低,也实际上并不能使安全性更高。它还引入了更多问题-在哪里保存密钥?

仅粘贴到Argon2,就不需要进一步的操作了。

答案 1 :(得分:2)

  

现在,我想保护新的注册用户。

     
      
  1. 我需要先对其进行过滤。 (由于不相关而略过)
  2.   

如果使用“过滤器”,则表示您以某种方式更改了此密码。...否!不仅不需要这样做,而且实际上会使您日后头疼不已上路,并降低了密码的安全性。

  

现在这是提出问题的地方。

     
      
  1. 我还需要加密哈希密码吗?
  2.   

不。散列是一种单向功能。您无法从其哈希中恢复密码。 (您可以使用彩虹表,该表实际上是导致某些哈希的密码列表。这就是适当的盐有助于防止的内容。)

加密此哈希值不会获得任何好处。

  

另一个问题出现了

     
      
  1. 如何确保key_str的安全,以便可以将其用于进一步的使用(用于身份验证)?
  2.   

这实际上是加密无用的关键原因。要使用它,您需要对其解密,这意味着密钥必须与散列数据放在第一位。