5

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

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

我有这个警告:

Unknown hashing algorithm: sha256

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

笔记

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

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

4

5 回答 5

2

我知道你让它工作了,但我想补充一点,我已经查看了 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可能被禁用的方法。

于 2016-01-03T08:30:46.483 回答
2

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

于 2017-09-13T09:44:16.920 回答
0

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

于 2020-03-30T05:02:34.703 回答
0

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

于 2017-06-22T03:11:31.343 回答
0

1)Open localhost/phpmyadmin or 127.0.0.1/phpmyadmin which certainly gives you an error.

2).To fix this, restart the server to start the service of PHPMYADMIN.

3).if you are on local server, open your xampp or wampp, stop all services then start it.

4).This will fix your all issues for sure

于 2019-01-22T06:58:50.820 回答