- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
打开“portable_hashes”。我注意到,无论出于何种原因,它生成的哈希值并不总是相同的——但在通过“CheckPassword”传递时始终返回有效值。我还注意到在生成哈希时使用了“PHP_VERSION”——这两件事结合在一起让我很担心……便携性如何?我可以在服务器、Linux、Windows、64 位、32 位等之间移动哈希值(保存在用户数据库中)并且仍然让它们验证吗?我需要做什么才能使密码不再有效?
我问的原因是因为我在我的框架中使用 phpass 作为密码,这将为我的几个网站提供支持,其中许多网站目前有数千名用户 - 在某些情况下我不得不移动它们到不同的服务器上,当然还要升级 php。我也可能将其中一两个从 Apache 切换到 lighthttpd 或类似的东西。不用说,我非常偏执,总有一天我会遇到支持噩梦,除了通过电子邮件向所有人发送新密码外,我无法通过任何其他方式解决它(这听起来真的很不安全)。
即使有哪怕一丁点机会使密码无效 - 我必须采取哪些步骤来制作我自己的密码哈希生成器?我已经使用了 16 字节的随机盐(每个用户),除此之外唯一的问题是拉伸(stretch) - 对吧?
最佳答案
根据 PHP 版本,您不需要启用可移植哈希。在 PHP 5.3 及更高版本上,如果系统上不可用,PHP 会提供自己的 bcrypt 实现。 如果您所有的服务器都有 PHP 5.3 及更高版本,我强烈建议关闭可移植散列。存在 PHPass“可移植散列”,因为根据安装的 PHP 版本,bcrypt 可能不可用。 p>
也就是说,PHPass 可移植散列确实将盐存储在其散列中。这就是为什么每次使用相同的密码运行都是不同的。
此外,PHPass 在生成这些散列时使用 PHP_VERSION
* 来检查该版本可用的 md5()
函数是否支持$rawMode
参数。如果没有,则使用 pack()
将十六进制数据转换为二进制数据(请注意,这比使用 $rawMode
慢得多,这就是分支的原因制作)。
同样,如果您所有的服务器都运行 PHP 5.3 及更高版本,我强烈建议关闭便携模式并让 PHPass 使用 bcrypt
。由于 PHP 5.3+ 在系统不可用时提供了自己的实现,因此您的哈希将可跨操作系统检查。即使您确实关闭了便携模式,PHPass 仍会足够智能,以正确的方式检查您的旧哈希值。
我和你的情况一样,在我的框架中跨多个站点使用 PHPass。由于我关闭了便携模式,我将我的登录脚本设置为逐步重新哈希登录时未使用 bcrypt 的密码。
* 131 行
编辑:有关更多说明,这里是可移植模式下哈希的生成方式(简化,不使用 PHPass 中找到的实际变量,但准确)。请注意,PHPass 使用他们自己的 base64 编码版本。
$final = '$P$'
$final .= encode64_int($rounds)
(来自构造函数,在 PHP 5+ 上最小为 5,其他为 3)
$final .= genSalt()
(Salt 是 6 个字节...“encode64”格式的 8 个字节)。
$hash = md5($salt . $password)
对于 2
$rounds
次,执行 $hash = md5($hash . $password)
$final = encode64($hash)
所以最终的散列基本上是这样的:
$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0
\__________/\____________________/
\ \
\ \ Actual Hash
\
\ $P$ 9 IQRaTwmf
\_/ \ \______/
\ \ \
\ \ \ Salt
\ \
\ \ # Rounds (not decimal representation, 9 is actually 11)
\
\ Hash Header
关于php - 在多个服务器之间使用 phpass 有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4789150/
我正在创建一项处理大量个人数据的服务,因此让密码直接泄露是不合适的。我一直在四处寻找任何可能的解决方案,引起我注意的一个是 phpass .我确实在 StackOverflow 上通过 here 读到
我已经成功地使用 Phpass 对注册用户密码进行哈希处理并将它们存储在数据库中,现在我卡在了登录名如何检查提交的用户名和密码,检查用户名是否存在于数据库中然后检查哈希密码与给定一个。 非常感谢任何帮
我在插入时使用 phpass 对密码进行哈希处理,如下所示 public function addAdmin(){ $this->load->library('phpass');
长期以来,我一直在使用 PHPass 来散列我的密码。我承认仍然有一些我不完全理解(或忽略)的东西来正确地散列密码,所以今天我正在审查我能找到的所有关于它的信息。 查看 PHPass 文档,我已经介入
我正在查看 SO 上很多答案中推荐的 PHPass 库。但是当我查看生成的密码时,我看到类似这样的内容: 现在其中一些只是 1234,有些更复杂一些。有些真的很复杂(大写、小写、字符)等。但是,我仍然
我正在将网站从 Wordpress 转换为使用 Codeigniter 开发的自定义 CMS。有人告诉我 Wordpress 使用 PHPass 来散列他们的密码,所以我正在使用 PHPass 库(如
我正在使用 PHPASS 来存储加密的密码并在登录时进行比较。 这是代码 ob_start(); $userName = $password = ""; $userNameErr = $passwor
打开“portable_hashes”。我注意到,无论出于何种原因,它生成的哈希值并不总是相同的——但在通过“CheckPassword”传递时始终返回有效值。我还注意到在生成哈希时使用了“PHP_V
我正在阅读 phpass manual .在某些时候,它会像这样检查散列的结果: $hash = $hasher->HashPassword($pass); if (strlen($hash) < 2
phpass 是一种广泛使用的散列“框架”。 在将普通密码提供给 PasswordHash (v0.2) 之前,像这样对普通密码加盐是一种好习惯吗?: $dynamicSalt = $record
我正在尝试在 Yii 中实现 phpass 身份验证,但每次都失败。我已经阅读了很多 SO 文章,但还没有找到解决方案,所以我认为这一定是 Yii 特有的问题。 我在 User.php 中保存散列密码
一直试图在论坛和堆栈的问题中找到解决方案,但没有结果,所以你是我最后的希望。我使用 phpass 进行密码加密,注册脚本工作正常,但是当我尝试登录并使用 CheckPassword 函数时,它总是返回
我的 wordpress 后端使用 phpass 哈希算法并使用网络服务给我 phpass。在 ios 中以 swift 结束我试图在 swift 中生成相同的 phpass 哈希。以下是 swift
只想用PHPass在 Codeigniter 中对密码进行哈希处理。我从 phpass 网站下载了 zip 文件,提取了内容,并将 PasswordHash.php 文件复制到我的库文件夹中。 然后我
我正在尝试使用 phpass 存储我的用户密码,但我很难正确实现它。我有工作代码,但我将密码存储为文本,我知道这是不安全的。根据 phpbestpractices.org,最安全的方法是 phpass
不知不觉中,我实现了一个使用 md5 作为哈希算法的登录系统。现在我知道得更多了,我想转而使用 PHPass。我的问题是该系统已经在生产中,要求所有用户更改他们的密码将是最令人头疼的问题。 我想出了一
我正在努力使用 phpass 在 codeigniter 中正确执行密码哈希。我已经将 phpass 密码哈希文件添加到 codeigniter 的库文件夹中,现在我不知道如何正确编写语句 $t_ha
我有一个散列 Wordpress 密码数据库。我正在尝试根据数据库存储的密码检查用户密码,但哈希值不正确。我正在使用 this github code在 isMatch() 中进行一些登录。知道为什么
我在一家公司工作,我必须将他们的 API 从 Php 重新制作到 Golang。以前的开发人员在 Php 中使用 Phpass,但是,我需要在 Golang 中使用它。 我搜索了如何在 go 中实现
我想使用我自己用 Node.js 编写的身份验证服务对 WP 用户进行身份验证。我已将用户保存在 wp_users 中 table 。他们的密码由 WordPress 使用 Phpass 方法进行哈希
我是一名优秀的程序员,十分优秀!