mhash_keygen_s2k()的替代方案

时间:2012-10-09 17:38:17

标签: php hash mcrypt s2k mhash

mcrypt_encrypt manual page说:

  

建议使用mhash函数从字符串创建密钥。

但是introduction of the mhash手册说:

  

注意:此扩展程序已被Hash淘汰。

然而,我能找到的对于相当有用的mhash_keygen_s2k()函数最接近的是hash_pbkdf2()函数。但是,我甚至不确定它是否适合这项工作,因为它只存在于SVN中。

那么,我可以依赖mhash扩展名,还是最终会被弃用和删除?如果是这样,是否有其他内置函数或我是否必须自己实现Salted S2K算法?

1 个答案:

答案 0 :(得分:0)

我最终偷看了将其移植到PHP的mhash源代码:

function keygen_s2k($hash, $password, $salt, $bytes)
{
    $result = false;

    if (extension_loaded('hash') === true)
    {
        foreach (range(0, ceil($bytes / strlen(hash($hash, null, true))) - 1) as $i)
        {
            $result .= hash($hash, str_repeat("\0", $i) . str_pad(substr($salt, 0, 8), 8, "\0", STR_PAD_RIGHT) . $password, true);
        }

        $result = substr($result, 0, intval($bytes));
    }

    return $result;
}

如果有人知道任何其他内置功能,我仍然希望听到它。