PHP:mcrypt_ecb在函数内部不起作用

时间:2014-01-03 12:44:30

标签: php encryption encryption-symmetric

我有一个非常简单的功能:

$me = 45S237s53dsSerwjw53s23rjf; //Some long encrypted string.

function decrypt($user){
    $user = pack("H*" , $user); //Converting from hexadecimal to binary

    $user = mcrypt_ecb(MCRYPT_DES, $key, $user, MCRYPT_DECRYPT); //Decrypting

    return $user;
}

问题是,如果我去echo decrypt($me);它不起作用,我不会以解密的字符串结束。

但是,如果我在不使用function的情况下做同样的事情就可以了:

    $user = $me;        

    $user = pack("H*" , $user);

    $user = mcrypt_ecb(MCRYPT_DES, $key, $user, MCRYPT_DECRYPT);

    echo $user; //Works fine...

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

您错过了函数体内的$key变量。使用正确的错误级别设置,您会收到警告,$key未定义。

$key添加为函数参数或在函数体内定义$key(或者,从全局范围中导入$key,第三种方法)。

1

function decrypt($user, $key){
    //...
}

2

function decrypt($user){
    $key = '....whatever...';
    //...
}

3.1

function decrypt($user){
    global $key;
    //...
}

3.2

function decrypt($user){
    //...
    $user = mcrypt_ecb(MCRYPT_DES, $GLOBALS['key'], $user, MCRYPT_DECRYPT);
    //...
}