我应该在哈希后加密我的密码吗?如果是这样如何正确地做到这一点?
Should I encrypt my password after I hashed it? If so how to properly do it?
我试图更好地理解散列和加密,但是我偶然发现了我在 Google 中似乎找不到的问题,因为 Google 不断提供散列和加密的基本区别加密,我已经读过。
更多的人在 Whosebug 中提问,他们不知道加密和散列之间的区别,这些问题在 SO 的搜索引擎中排名靠前。这没有回答我的问题,也没有帮助我。所以我想确定一些关于散列密码和加密密码的事情。
现在假设我想保护一个新注册用户..
- 我需要先过滤一下。 (因无关略过)
得到 'safe' 形式的密码后,我对其进行哈希处理。
$safePassword; // Already filled with safe password.
$hash = password_hash($safePassword,PASSWORD_ARGON2I);
然后插入数据库
这就是问题所在。
我还需要加密散列密码吗?
如果是这样,我该如何安全地加密密码? (我要使用 AES)
AES_ENCRYPT(str, key_str);
其中 str
是我们要加密的字符串,key_str
是 加密密钥。
又一个问题升起
- 如何保证
key_str
的安全,以便我可以将其用于进一步使用(用于身份验证)?
您 不需要 加密密码,只需 运行 通过您的密码哈希,就像您在问题中包含的那样,就可以了。哈希是一种单向运算,所以"impossible"反转哈希得到原始密码
在对密码进行哈希处理后对其进行加密并不会降低安全性,只是不会真正提高安全性。它还引入了更多问题-将密钥放在哪里?
坚持只使用 Argon2,不需要任何进一步的东西。
Now let's say I wanted to secure a new registered user..
- I need to filter it first. (Skipped because of unrelated)
如果通过“过滤”,您的意思是以某种方式更改此密码.... 不!您不仅不需要这样做,实际上还给自己造成了以后真的很头疼,并降低了密码的安全性。
Now this is the where questions rises.
- Do I still need to encrypt the hashed password?
没有。散列是一种单向函数。您无法从其哈希中恢复密码。 (你 可以 使用彩虹 table,它实际上是一个密码列表,会产生特定的哈希值。适当的盐有助于防止这种情况。)
加密此散列没有任何好处。
Another question rises
- How do I keep the key_str safe, so I can use it for further use (for authentication)?
这实际上是加密没有用的一个关键原因。要使用它,您需要对其进行解密,这意味着首先将密钥与哈希数据放在同一位置。
我试图更好地理解散列和加密,但是我偶然发现了我在 Google 中似乎找不到的问题,因为 Google 不断提供散列和加密的基本区别加密,我已经读过。
更多的人在 Whosebug 中提问,他们不知道加密和散列之间的区别,这些问题在 SO 的搜索引擎中排名靠前。这没有回答我的问题,也没有帮助我。所以我想确定一些关于散列密码和加密密码的事情。
现在假设我想保护一个新注册用户..
- 我需要先过滤一下。 (因无关略过)
得到 'safe' 形式的密码后,我对其进行哈希处理。
$safePassword; // Already filled with safe password. $hash = password_hash($safePassword,PASSWORD_ARGON2I);
然后插入数据库
这就是问题所在。
我还需要加密散列密码吗?
如果是这样,我该如何安全地加密密码? (我要使用 AES)
AES_ENCRYPT(str, key_str);
其中 str
是我们要加密的字符串,key_str
是 加密密钥。
又一个问题升起
- 如何保证
key_str
的安全,以便我可以将其用于进一步使用(用于身份验证)?
您 不需要 加密密码,只需 运行 通过您的密码哈希,就像您在问题中包含的那样,就可以了。哈希是一种单向运算,所以"impossible"反转哈希得到原始密码
在对密码进行哈希处理后对其进行加密并不会降低安全性,只是不会真正提高安全性。它还引入了更多问题-将密钥放在哪里?
坚持只使用 Argon2,不需要任何进一步的东西。
Now let's say I wanted to secure a new registered user..
- I need to filter it first. (Skipped because of unrelated)
如果通过“过滤”,您的意思是以某种方式更改此密码.... 不!您不仅不需要这样做,实际上还给自己造成了以后真的很头疼,并降低了密码的安全性。
Now this is the where questions rises.
- Do I still need to encrypt the hashed password?
没有。散列是一种单向函数。您无法从其哈希中恢复密码。 (你 可以 使用彩虹 table,它实际上是一个密码列表,会产生特定的哈希值。适当的盐有助于防止这种情况。)
加密此散列没有任何好处。
Another question rises
- How do I keep the key_str safe, so I can use it for further use (for authentication)?
这实际上是加密没有用的一个关键原因。要使用它,您需要对其进行解密,这意味着首先将密钥与哈希数据放在同一位置。