pbkdf2 的 PHP 实现在 linux 上耗尽了内存,但在 windows 上却没有

标签 php linux hash

我有一个 php 应用程序,它调用 hash_pbkdf2 在将密码存储到数据库之前使用盐对密码进行编码。

问题是,当我在 Windows (WAMPServer 2.5) 中调用该函数时,它运行良好,但当我将应用程序克隆到 Linux Mint 17 时,它最多使用 70000GB 内存。它执行 20000 次迭代,虽然修改迭代次数不会改变它给出的错误消息(所以我想它使用的内存量也是相同的),这是

PHP fatal error :XXX 中允许的 134217728 字节内存已耗尽(已尝试分配 69815158964224 字节)

Apache2 版本是最新的,PHP5 版本也是最新的。知道我做错了什么吗?

最佳答案

我能够使用 Apache2 模块在 5.5.9-1ubuntu4.13 中通过以下最小测试用例重现此问题。

<?php

$a = [];

hash_pbkdf2('sha256', 'password', 'salt', 1);

据我所知,在 Ubuntu 上的 PHP 5.5 hash_pbkdf2 实现中存在多个错误,在 CLI 版本中我们遇到了我在这篇文章中描述的计时问题:

PHP hash_pbkdf2 takes orders of magnitude longer on AWS instances

不幸的是,PHP 5.5 仅接收安全更新,所以我无法打开错误。据我所知,它已在 PHP 5.6 中修复,因此我的建议是升级到它——您可以使用此 PPA:

https://launchpad.net/~ondrej/+archive/ubuntu/php5-5.6 .

关于pbkdf2 的 PHP 实现在 linux 上耗尽了内存,但在 windows 上却没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32714481/

相关文章:

linux - 注释行出现错误 "0: command not found"

c# - HashPasswordForStoringInConfigFile()的输出是什么格式,如何存储最好?

c - 将哈希表传递给函数时数据丢失

ruby - 关联数组(或哈希)php 到 ruby

javascript - 如何在页面加载时打开外部存储模式

javascript - 如何根据 echo 使用 Javascript 重定向 PHP 表单

php - 使用 PHP curl 从 Google 的地理编码 API 返回数据

linux - 在写入触发的 AWS ec2 上运行同步脚本

php - 将天数添加到日期

c - 我们如何区分控制终端和非控制终端的文件描述符?