PHP7:未知的散列算法:sha256

时间:2015-11-29 01:49:41

标签: php-7

在PHP7中,当我散列这样的字符串时:

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

我有这个警告:

Unknown hashing algorithm: sha256

在PHP 5.2.9中,它正在运行。是不是在php7中弃用了sha256?其他想法?

注释

  • 扩展名“php_openssl.dll”已启用。
  • hash(“sha512”,“password”); // WORKS!
  • print_r( hash_algos() );

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

5 个答案:

答案 0 :(得分:2)

我知道你可以使用它,但我想补充一点,我已经浏览了PHP7源代码,并且没有理由说它为什么不能每次都工作。

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

ifeq "$(strip $(filter debug,$(MAKECMDGOALS)))" "debug"
EXEDIR = bin/release/
OBJECTSDIR = o/release/
endif
ifeq "$(strip $(filter release,$(MAKECMDGOALS)))" "release"
EXEDIR = bin/debug/
OBJECTSDIR = o/debug/
endif

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); } 呢?这是在./ext/hash/hash_sha.c

中定义的
php_hash_sha256_ops

通过查看此文件中的代码,您还可以看到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()的单一方式。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

1)打开localhost / phpmyadmin或127.0.0.1/phpmyadmin,肯定会给您一个错误。

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

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

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

答案 4 :(得分:0)

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