0

我不断收到这些警告:

警告:mcrypt_generic_init(): mcrypt_generic_init(): 1 不是 C:\Users\dever\Desktop\web code\HeloWorld\HeloWorld\Crypt.php 第 123 行第 9 列中的有效 MCrypt 资源。

警告:mdecrypt_generic(): mdecrypt_generic(): 1 不是 C:\Users\dever\Desktop\web code\HeloWorld\HeloWorld\Crypt.php 第 124 行第 9 列中的有效 MCrypt 资源。

警告:mcrypt_generic_deinit(): mcrypt_generic_deinit(): 1 不是 C:\Users\dever\Desktop\web code\HeloWorld\HeloWorld\Crypt.php 第 125 行第 9 列中的有效 MCrypt 资源。

警告:mcrypt_generic_init(): mcrypt_generic_init(): 1 不是 C:\Users\dever\Desktop\web code\HeloWorld\HeloWorld\Crypt.php 第 100 行第 9 列中的有效 MCrypt 资源。

警告:mcrypt_generic(): mcrypt_generic(): 1 不是 C:\Users\dever\Desktop\web code\HeloWorld\HeloWorld\Crypt.php 第 105 行第 9 列中的有效 MCrypt 资源。

警告:mcrypt_generic_deinit(): mcrypt_generic_deinit(): 1 不是 C:\Users\dever\Desktop\web code\HeloWorld\HeloWorld\Crypt.php 第 107 行第 9 列中的有效 MCrypt 资源。

由于这是一个警告并且字符串“似乎”被加密了,我一直忽略它直到现在。但是,我正在使用的远程服务器似乎不喜欢加密字符串并向我返回错误说明。

这是生成这些警告的代码:

    mcrypt_generic_init($this->_td, $this->_key, $iv);
    $data = mdecrypt_generic($this->_td, $data);
    mcrypt_generic_deinit($this->_td);

$iv = mcrypt_create_iv(self::AES_BLOCK_SIZE, $random_source);
    $s = mcrypt_generic_init($this->_td, $this->_key, $iv);
    if( ($s < 0) || ($s === false))
        die( "Really an error" );
    $data = mcrypt_generic($this->_td, $data);
    $data = $iv.$data;
    mcrypt_generic_deinit($this->_td);

我已经研究过,但无法找出这些警告的含义,如果它们影响加密/解密或究竟是什么问题?我很确定它不是代码(因为我让它在不同的服务器上工作)。

4

1 回答 1

1

这是我执行的一个测试,它重现了您在var_dumps 中看到的值:

$td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, '/usr/lib/mcrypt-modes');
var_dump($td);
mcrypt_module_close($td);
var_dump($td);

它打印:

resource(4) of type (mcrypt)
resource(4) of type (Unknown)

由于您看到了相同的行为(资源 id 保持不变,但失去了mcrypt关联),您似乎在初始化$this->_td和实际调用mcrypt_generic_init.

于 2012-10-25T19:12:19.073 回答