- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经阅读了有关此问题的许多问题,但许多答案相互矛盾或我不明白。
您应该始终将密码存储为哈希值,而不是纯文本。但是您是否应该将盐(对于每个用户来说都是唯一的)存储在数据库中的散列密码+盐旁边。这对我来说似乎不太聪明,因为有人不能访问数据库,查找名为 Admin 或其他的帐户,然后从中计算出密码吗?
最佳答案
很多人都在说“阻止彩虹表”,但没有解释彩虹表的作用或为什么会阻止它们。
彩虹表是一种聪明的方法,可以预先计算大量哈希值并将它们存储在比实际需要的内存更少的内存中,并且您可以使用它们非常快速地反转哈希值。裸函数表,例如 hash = md5(password)
和hash = sha1(password)
很常见。
但是,它们可以为任何哈希函数生成,可以描述为 output = f(input)
。如果您对所有用户密码使用站点范围的盐,例如 hash = md5(salt+password)
,你可以构造一个函数 f
, f(password) = md5(salt+password)
。因此,您可以为此函数生成彩虹表,这将花费很长时间,但可以让您非常快速地破解数据库中的每个密码。
如果每个密码的盐值不同,则无法生成可以破解数据库中所有密码的彩虹表。您可以为每个用户生成一个新的,但这毫无意义——天真的暴力破解不会慢。因此,为每个用户提供单独的盐可以阻止彩虹表攻击。
有多种方法可以实现此目的。流行的方式包括:
hash = hashfunction(salt + password)
hash = hashfunction(salt + password + user_id)
例如hash = hashfunction(global_salt + user_salt + password)
拥有全局盐可能会增加破解密码的额外复杂性,因为它可能存储在数据库外部(例如,在代码中),在数据库泄露时攻击者可能无法访问。从密码学角度来看,我认为它不会增加太多,但实际上它可能会减慢速度。
最后,回答您的实际问题:
将盐与用户数据一起存储不会削弱哈希值。哈希函数是单向的:给定密码的哈希值,即使是未加盐的密码,也很难找到该密码。加盐背后的动机不是为了使单个哈希更安全,而是为了使多个哈希的集合更安全。对于未加盐的哈希值集合,有多种攻击方式:
123
、 password
、 god
)进行哈希处理并查看数据库中是否存在任何密码,然后危及这些帐户关于security - 盐、密码和安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2583203/
Internal Server Error: /admin/account/customuser/add/ Traceback (most recent call last): File "C:\
有问题!虽然我发现几乎相似的线程但没有帮助:( 我编写了一个 php 脚本来从我的 MySQL 数据库中获取注册用户的数量。该脚本在我的本地主机上运行良好;它使用给定的用户名、密码和主机名,分别是“r
我正在做一项基于密码的作业,我将 key 和消息放在单独的数组中。我想创建第三个数组,其中包含围绕消息大小的 key ,如下所示: message keykeyk 我已经在这个问题上苦苦挣扎了一段时间
我的几个客户要求我实现图形密码检查器,例如 关于如何实现这种 UI 有什么想法吗? 最佳答案 试着看看这个:https://code.google.com/p/android-lockpattern/
我正在使用 MAMP,每次登录 phpMyAdmin 时,都会收到以下错误/警告消息: the configuration file now needs a secret passphrase (bl
我正在尝试通过将 Visual Studio 2013 连接到我的测试机来调试 WDF 驱动程序。它创建一个名为 WDKRemoteUser 的用户,并在进行测试时尝试自动登录。有人知道这个用户的密码
使用具有指定用户名和密码的 SVN 提交。我希望服务器抛出错误;所以我可以告诉我的用户他/她的密码错误。 相反,在使用错误密码提交后: svn commit "test_file.txt" --use
我正在尝试实现 friend 推荐。 它从节点“你”开始。而且,我想找到节点“安娜”。 换句话说,这是我的两个或更多 friend 共同认识的人。上面的示例节点是 Anna。 如果您的帮助,我将不胜感
我都尝试过 wget --user=myuser --password=mypassword myfile 和 wget --ftp-user=myuser --ftp-password=mypass
我的一位用户提示说,每当他尝试使用默认管理界面(Django 的管理员)添加新用户(auth.User)时,新用户名和密码都会自动填充他自己的。 问题是他在登录时要求 Firefox 记住他的用户名/
我们正在开发一款应用(当然)用于应用购买 (IAP)。我已完成指南中的所有操作以启用 iap,并且一切正常,直到我想要购买为止。 部分代码: MainViewController.m -(vo
我试图创建两个可选匹配项的并集(如下所示),但我得到的不是并集,而是两者的交集。我应该如何更改此查询以获得所需的联合? optional match (a:PA)-[r2:network*2]-(b:
我想将Ansible用作另一个Python软件的一部分。在该软件中,我有一个包含其用户名/密码的主机列表。 有没有一种方法可以将SSH连接的用户/密码传递给Ansible ad-hoc命令或以加密方式
嗨,我在使用xampp的Apache Web服务器上收到错误500。直到我使用.htaccess,.htpasswd文件,错误才出现。我搜索了,但找不到语法错误。我只有1张图片和要保护的索引文件。以下
我一直使用它来编辑用户帐户信息: $this->validate($request, [ 'password' => 'min:6', 'password_confirmation'
我需要使用InstallUtil来安装C# Windows服务。我需要设置服务登录凭据(用户名和密码)。这一切都需要默默地完成。 有没有办法做这样的事情: installutil.exe myserv
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
如果我有一个随机的、16 个字符长的字母数字盐(不同大小写),它是为每个用户生成和存储的,我是否还需要一个站点范围的盐? 换句话说,这样好吗? sha1($user_salt . $password)
我正在开发一个空白程序,该程序将允许用户创建一个帐户,以便他们可以存储其余额和提款/存款。用户输入用户名和密码后,如何存储这些信息以便用户可以登录并查看其余额?我不一定要尝试使其非常安全,我只是希望能
我正在尝试寻找一种通用方法来搜索没有链接到另一个节点或节点集的节点或节点集。例如,我能够找到特定类型(例如 :Style)的所有节点,这些节点以某种方式连接到一组特定的节点(例如 :MetadataR
我是一名优秀的程序员,十分优秀!