Php加密不起作用

时间:2011-02-10 15:30:45

标签: php encryption

有谁知道为什么这个php加密/解密不起作用? 我们在我们的网站上使用过它,它主要起作用。但是现在我们把它变成了一个命令行脚本,它一直停止工作......

我们尝试将密钥编码为utf8并尝试删除修剪。但两者都不起作用。     

$e = new enc();
$pass = !isset($argv[1]) ? 'ill' : $argv[1];
$encPass = $e->_encrypt($pass);
$decPass = $e->_decrypt($encPass);

echo 'input: '. $pass . "\n";
echo 'encode: ' . $encPass . "\n";
echo 'decode: ' . $decPass;

class enc
{
/**
     * Encrypt data using AES256
     *
     * @param string $data The plaintext
     * @return string The encyrypted data
     */
    function _encrypt($data)
    {
        $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);
        return mcrypt_encrypt(
            MCRYPT_RIJNDAEL_256, "gw2iYt26Gw", trim($data), MCRYPT_MODE_ECB,
            $iv
        );
    }

    /**
     * Decrypt data using AES256
     *
     * @param string $data The AES256 encrypted data
     * @return string The decyrypted data
     */
    function _decrypt($data)
    {
        $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);
        return trim(
            mcrypt_decrypt(
                MCRYPT_RIJNDAEL_256, "gw2iYt26Gw", trim($data),
                MCRYPT_MODE_ECB, $iv
            )
        );
    }
}
?>

编辑: 使用encPass解密

的解决方法很少

2 个答案:

答案 0 :(得分:2)

您正在解密普通密码。

执行:

$decPass = $e->_decrypt($encPass);

问题更新后编辑:您必须在解码时删除对trim()的调用。它搞砸了你的输入。在enc::_decrypt()中清除修剪并且它有效。

答案 1 :(得分:0)

PHP的CLI版本可能具有与Apache版本不同的配置。这意味着如果您的Apache版本具有mcrypt支持,则并不意味着CLI版本具有mcrypt支持。查看php -i