php - CRYPT_SHA512 是否具有与 bcrypt 一样强大的迭代(以及相关问题)

标签 php security cryptography kohana

我正在编写用户登录系统的第一次尝试,希望能把它做好。我觉得我在这里处于重复的领域,但就我所有的阅读而言,我无法找到几个问题的可靠答案。但是,如果我遗漏了什么,请随时为我指出正确的方向。

我将对所有密码使用每个用户 128 位盐,并强制执行“强”(我知道是主观的!)密码,但无法找出最好的哈希方法,所以,

  1. 会使用 CRYPT_SHA512随着迭代 像使用一样强大 CRYPT_BLOWFISH ?

  2. 有什么区别 在 CRYPT_SHA512 与 迭代和重复 hash_hmac使用 sha512一个大的) 次数。有比 另一个是推荐的 哈希密码?我问是因为 我正在使用 Kohana 和默认值 auth实现用途 hash_hmac .我不认为它会 太难添加迭代 那(我将不得不 修改它以添加每个用户盐 无论如何),这让我想到了 ..

  3. 是否有一个模块可以做到这一点? 小花(3.1)?在我开始写我的之前 拥有,如果那里有东西 很合适,我很乐意使用 那。所以,执行的东西 哈希拉伸(stretch)(无论是 bcrypt 还是 sha512) 并允许每个用户加盐。 最后,

...正如评论中所指出的,问题 4 实际上是一个完全独立的问题,因此我将其删除。随意忽略它。我不会完全编辑它的唯一原因是它已经在答案中被引用。

<罢工> 4. 我的系统将允许具有不同权限的用户。 有些将是管理员 完全权利,一些开发商 权利略少,一路走好 直到有权限的匿名用户 例如,只留下评论。 我找不到任何 关于这个的信息真的。什么 是存储用户的“正确”方式 数据库中的帐户类型。一种 幼稚的第一个想法是一个简单的 用户表中的整数将 够了,但我忍不住想 这是一个非常糟糕的主意。如果 有人掌握了数据库 不难找出哪个 int代表管理员, 那么他们只需要蛮力 一个密码即可获得完全访问权限 权利。简单地就足够了吗 散列帐户类型整数和 存储它,或者我应该寻找 在另一种方法?

最佳答案

问题1-3的答案实际上是一个答案,由几个部分组成。

首先,您应该使用带有每个用户盐的强哈希。我特别建议 ​​PBKDF2,这是一个有用的系统。这包括迭代。

您对 bcrypt 的引用有点不同。密码应该始终是单向散列的。您可以使用 PBKDF2 或 hmac 之类的函数来执行此操作。您不应该使用可逆算法。 但是最好是将盐存储在远离散列本身的地方。这样做的一个建议是使用从文件系统而不是数据库访问的 key 对盐进行 bcrypt。最好在具有 600 权限的文件中,该文件由网络服务器用户以外的其他人拥有并由 setuid 等加载。这样即使数据库遭到破坏,仍然没有足够的信息来推导出密码。

第 4 部分是关于存储 ACL 的数据结构。有lots of options为此,请环顾四周寻找适合您的东西。您可能不需要完整的 ACL,而只需拥有用户角色/组或特定的权限标志。这将取决于您的应用。

关于php - CRYPT_SHA512 是否具有与 bcrypt 一样强大的迭代(以及相关问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6343035/

相关文章:

php - Laravel Lumen Collection - Group By With Sum 并保留值

php - 由于冒号而未获取 xml 节点

java - RC4解密Java

random - 熵源的安全混合

javascript - 如何将之前加载的文件添加到 DropZone.js

ios - WKWebView - iframe 内容未加载到模拟器/设备中

php - 如果 mysql_query() 失败,该怎么办?

Android - 获取正在下载的文件的 URL

python - Krakenex API 多对查询

php - 如何将PHP中的字符串截断为最接近特定字符数的句子?