Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mcrypt_模块打开()警告!_Php_Mamp - Fatal编程技术网

Php mcrypt_模块打开()警告!

Php mcrypt_模块打开()警告!,php,mamp,Php,Mamp,我在MacOSX上使用Mamp服务器。我正在尝试在我的客户端cookie项目中实现加密。我收到了警告 警告:mcrypt_module_open()[function.mcrypt module open]:无法打开加密模块 我签入了php.ini文件,在mcrypt扩展名前面没有分号。有人能帮忙解决这个问题吗 提前感谢在php.ini中启用了mcrypt模块,否则您将在调用未定义函数时收到错误消息 它表明请求的密码方法不可用。您可能有输入错误,或者其中一个密码没有编译到您的mcrypt.so版

我在MacOSX上使用Mamp服务器。我正在尝试在我的客户端cookie项目中实现加密。我收到了警告

警告:mcrypt_module_open()[function.mcrypt module open]:无法打开加密模块

我签入了php.ini文件,在mcrypt扩展名前面没有分号。有人能帮忙解决这个问题吗


提前感谢

在php.ini中启用了mcrypt模块,否则您将在调用未定义函数时收到错误消息

它表明请求的密码方法不可用。您可能有输入错误,或者其中一个密码没有编译到您的
mcrypt.so
版本中

 mcrypt_module_open('rijndael-256', '', 'ofb', '');   // works

 mcrypt_module_open('wrong', '', '', '');   // generates your error

和额外的参数表明系统上的libmcrypt可能依赖于共享模块本身。因此,您可能需要搜索另一个版本。尝试MAMP更新,或者使用该PHP发行版的pro版本。

我正在CFB模式下使用blowfish算法

static $cipher = 'blowfish';    
static $mode = 'cfb';
static $key = '$pxaWyXY67UIq*i&mNlFswBzyJkL7#1N';
我用来调用算法的命令是

mcrypt_module_open($cipher, '', $mode, '');

我会尝试另一种算法,并检查它是否有效。

@mario:谢谢你的回复。这是我的加密代码

class Cookie {
    private $created;
    private $userid;
    private $version;
    // mcrypt handle
    private $td;

    // mcrypt information
    static $cipher = 'rijndael-256';
    static $mode = 'ofb';
    static $key = '$pxaWyXY67UIq*i&mNlFswBzyJkL7#1N';

    // Cookie format information
    static $cookiename = 'USERAUTH';
    static $myversion = '1';
    // When the cookie expires
    static $expiration = '600';
    // When to reissue the cookie
    static $warning = '300';
    static $glue = '|';

    public function __construct($userid = false) {
        $this->td = mcrypt_module_open($cipher, '', $mode, '');
        if($this->userid) {
            $this->userid = $userid;
        } else {
            if(array_key_exists(self::$cookiename, $_COOKIE)) {
                $buffer = $this->_unpackage($_COOKIE[self::$cookiename]);   
            } else {
                throw new AuthException("No Cookie");   
            }
        }
    }

public function _encrypt($plaintext) {
        //$td = mcrypt_module_open (self::$cipher, '', self::$mode, '');
        $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MYCRYPT_RAND);
        mcrypt_generic_init ($td, $plaintext);
        $crypttext = mcrypt_generic($td, $plaintext);
        mcrypt_generic_deinit ($td);
        return $iv.$crypttext;  
    }

    public function _decrypt($crypttext) {
        //$td = mcrypt_module_open (self::$cipher, '', self::$mode, '');
        $ivsize = mcrypt_enc_get_iv_size ($td);
        $iv = substr ($crypt, 0, $ivsize);
        $crypttext = substr ($crypttext, $ivsize);
        $plaintext = "";
        if($iv) {
            mcrypt_generic_init($td, self::$key, $iv);
            $plaintext = mdecrypt_generic($td, $crypttext);
            mcrypt_generic_deinit ($td);    
        }
        return $plaintext;
    }

我还使用了George Schlassnagles“高级PHP编程”(第334ff页)中的这个示例。此代码包含一些错误。当您引用静态变量时,我认为您必须使用self:$var调用它

这一条应该有效:

mcrypt_module_open(self::$cipher, '', self::$mode, '');
请注意,还有一些错误,如:

  • validate()函数中的self::$resettime显然应命名为self::$warning
  • 函数_encrypt()和_decrypt()中的静态$key应该是self::$key
  • _package()和_解包函数中的$glue应该是self::$glue
  • 函数_reissue()从未使用过
  • 函数_encrypt()中的$td应该是$this->td
  • 函数set()和logout()中的set_cookie应命名为setcookie,并提供一个路径“/”(第四个参数),以便在整个网站上使用cookie(否则,如果在/login/facebook上设置cookie,则无法在/dashboard中访问)
  • $ivsize=mcrypt\u get\u iv\u size($this->td);in _decrypt()应该是
    $ivsize=mcrypt_get_iv_size(self:$cypher,self:$mode)

如果您的libmcrypt配置了“-disable dynamic loading”标志,那么这个问题将导致mcrypt没有可用的算法

在没有该标志的情况下重新编译libmcrypt,它就会工作。您甚至不必重建PHP或ext/mcrypt模块


我遇到了这个问题(PHP5.5 Solaris10/Sparc)

我尝试使用rijndael-256。就连这个也不行。说到Mamp pro,我更喜欢免费版而不是购买。我检查了phpinfo页面,页面显示mcrypt已启用。我在谷歌上看不到任何解决方案。你能帮我解决这个问题吗。我不知道如何摆脱这个警告并使其生效。除非你展示相关的代码部分,否则每个人都只能猜测。