authentication - bcrypt 哈希电子邮件地址和密码

标签 authentication passwords bcrypt

我正在建立一个匿名网站。所以基本上用户的帐户不能追溯到任何实际的人(例如通过电子邮件地址)。身份验证是我想了解您的想法的部分。如果我使用电子邮件/通行证组合进行身份验证,我可以使用 bcrypt 来散列电子邮件地址和密码吗(我知道这是可能的,但是否实用)?我想如果电子邮件是加密的,那么搜索数据库以找到匹配项会非常慢。这是真的/假的吗?你都有些什么想法呢?还有其他想法吗?基本上,我对任何关于如何进行身份验证的想法持开放态度,但如果它是通过电子邮件进行身份验证的,那么它就不能被公开/或解密。谢谢!

最佳答案

一旦对某些内容进行哈希处理,就永远无法恢复原来的内容。

让我们以密码为例,通常当用户使用电子邮件/密码注册时,您将对密码进行哈希处理(使用类似 bcrypt 的方法),然后将哈希存储在您的数据库中。这很好,因为如果攻击者获得了数据库的副本,就无法“解密”哈希。

在您的情况下,您可能不想对电子邮件进行哈希处理,因为这意味着您永远无法向此人发送电子邮件——我假设您会想要这样做。

如果您决定走这条路,您基本上只会为每个用户存储两个密码(这是我能想到的最接近的类比,对不起!)。

希望对您有所帮助!

编辑:更好的方法是创建一个仅提供密码的新帐户,然后自动为该人生成一个用户名。这就是像 privateinternetaccess.com 这样的公司所做的——他们会为你生成一些随机用户名——这样你就无法联系到用户,但他们仍然可以安全地登录到你的应用程序。

关于authentication - bcrypt 哈希电子邮件地址和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26576600/

相关文章:

android - 如何安全地在 Android 应用程序中实现登录功能?

node.js - Oauth2 Node Passport 授权 header 错误(匿名用户)

php - 用于跨域身份验证的 JWT token

python - 将密码保存到 Django 数据库表之前的最佳哈希方法

php - 将用户密码从加盐 SHA1 升级到 bcrypt

spring - 使用 Spring Security 3.0.2 进行 OpenId 身份验证和自动注册

passwords - 在 Jenkins 的 "Injected environment variables"页面上屏蔽未存储的密码参数

passwords - 是否可以在不创建新数据库连接的情况下对 Sqlanywhere 系统用户进行身份验证?

typescript - 如何使用 typescript 和 bcrypt 在 sequelize 模型中添加方法?

python - 为什么 "$2a"与 "$2b"很重要?