【问题标题】:PHP7: Unknown hashing algorithm: sha256PHP7:未知散列算法:sha256
【发布时间】:2015-11-29 01:49:41
【问题描述】:

在 PHP7 中,当我像这样散列一个字符串时:

$hash = hash("sha256", "password");

我有这个警告:

Unknown hashing algorithm: sha256

在 PHP 5.2.9 中,它可以正常工作。 sha256 在 php7 中被弃用了吗?其他想法?

注意事项

  • 扩展“php_openssl.dll”已启用。
  • hash("sha512", "密码"); // 工作!
  • print_r( hash_algos() );

    [0] => md2 [1] => md4 [2] => md5 [3] => sha1 [4] => sha224 [5] => sha256 [6] => sha384 [7] => sha512 ...

【问题讨论】:

  • 试试"sha2"
  • 这很奇怪,它应该可以工作:3v4l.org/ICYr5
  • 也就是说,您可能不应该使用 SHA256 散列密码。使用密码哈希。
  • 检查你从hash_algos返回的数组,看看它是否在那里。
  • sha2 不起作用。 sha512 有效。 Andrea,感谢您的提示(password_hash),但我现在不能使用它。

标签: php-7


【解决方案1】:

我知道你让它工作了,但我想补充一点,我已经查看了 PHP7 源代码,没有理由不能每次都工作。

./ext/hash/hash.c 中,我们定义了可用哈希表:

PHP_MINIT_FUNCTION(hash)
{
    // ...
    zend_hash_init(&php_hash_hashtable, 35, NULL, NULL, 1);

    // ...
    php_hash_register_algo("sha224",        &php_hash_sha224_ops);
    php_hash_register_algo("sha256",        &php_hash_sha256_ops);
    php_hash_register_algo("sha384",        &php_hash_sha384_ops);
    php_hash_register_algo("sha512",        &php_hash_sha512_ops);
    // ...
}

php_hash_register_algo()也很简单:

PHP_HASH_API void php_hash_register_algo(const char *algo, const php_hash_ops *ops) /* {{{ */
{
    size_t algo_len = strlen(algo);
    char *lower = zend_str_tolower_dup(algo, algo_len);
    zend_hash_str_add_ptr(&php_hash_hashtable, lower, algo_len, (void *) ops);
    efree(lower);
}

那么php_hash_sha256_ops呢?这是在./ext/hash/hash_sha.c 中定义的:

const php_hash_ops php_hash_sha256_ops = {
    (php_hash_init_func_t) PHP_SHA256Init,
    (php_hash_update_func_t) PHP_SHA256Update,
    (php_hash_final_func_t) PHP_SHA256Final,
    (php_hash_copy_func_t) php_hash_copy,
    32,
    64,
    sizeof(PHP_SHA256_CTX)
};

通过查看此文件中的代码,您还可以看到PHP_SHA256Init()PHP_SHA256Update()PHP_SHA256Final() 中没有预防条件。我找不到一种可以禁用 sha256 的方法。

【讨论】:

    【解决方案2】:

    对我来说归结为由于在配置中忘记了注释,我将 mod_php 与 mpm_event apache 一起使用。因此,线程环境中的非线程安全 php7,因此共享内存损坏和许多问题,其中一个是 sha1 在一些随机正常运行时间后不可用。

    【讨论】:

      【解决方案3】:

      我今天遇到了同样的问题。重启后自行解决

      【讨论】:

        【解决方案4】:

        1)打开 localhost/phpmyadmin 或 127.0.0.1/phpmyadmin 肯定会报错。

        2).要解决此问题,请重新启动服务器以启动 PHPMYADMIN 服务。

        3).如果您在本地服务器上,请打开您的 xampp 或 wampp,停止所有服务然后启动它。

        4). 这肯定会解决您的所有问题

        【讨论】:

        • [downvote 的原因] phpmyadmin 与该问题无关。这是关于散列,而不是数据库管理。
        【解决方案5】:

        只需要重新启动 xampp 或 MAMP 即可解决问题。

        【讨论】:

          猜你喜欢
          • 2019-04-17
          • 2019-10-30
          • 2013-01-09
          • 1970-01-01
          • 2019-03-09
          • 2021-05-21
          • 2015-01-23
          • 1970-01-01
          • 2013-02-28
          相关资源
          最近更新 更多