首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP7:未知散列算法: sha256

问PHP7:未知散列算法: sha256
EN

Stack Overflow用户
提问于 2015-11-29 01:49:41
回答 5查看 12K关注 0票数 5

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

代码语言:javascript
复制
$hash = hash("sha256", "password");

我有一个警告:

代码语言:javascript
复制
Unknown hashing algorithm: sha256

在PHP5.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 ...
EN

回答 5

Stack Overflow用户

发布于 2016-01-03 08:30:46

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

在./ext/hash/hash.c中,我们定义了可用散列表:

代码语言:javascript
复制
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()也非常简单:

代码语言:javascript
复制
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中定义的

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-09-13 09:44:16

对我来说,归结起来是因为我在mpm_event apache中使用的是一条被遗忘的评论。因此,线程环境中的非线程安全的php7,因此共享内存损坏和一些问题,其中之一是sha1是不可用的后,一些随机的正常运行时间。

票数 2
EN

Stack Overflow用户

发布于 2019-01-22 06:58:50

1)打开localhost/phpmyadmin或127.0.0.1/phpmyadmin,这肯定会导致错误。

2).To修复此问题,重新启动服务器以启动PHPMYADMIN服务。

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

4).This肯定会解决你的所有问题

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33978535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档