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