加密后mcrypt_decrypt不起作用 - 特殊字符问题

时间:2014-04-03 14:04:15

标签: php mcrypt

我使用下面的代码来加密和解密数据:

public function encrypt($plaintext) {        
    $ivSize = mcrypt_get_iv_size(self::CIPHER, self::MODE);
    $iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_RANDOM);
    $ciphertext = mcrypt_encrypt(self::CIPHER, $this->key, $plaintext, self::MODE, $iv);                
    return base64_encode($iv.$ciphertext);
}

public function decrypt($ciphertext) {
    $ciphertext = base64_decode($ciphertext);
    $ivSize = mcrypt_get_iv_size(self::CIPHER, self::MODE);
    if (strlen($ciphertext) < $ivSize) {
        throw new Exception('Missing initialization vector');
    }

    $iv = substr($ciphertext, 0, $ivSize);
    $ciphertext = substr($ciphertext, $ivSize);
    $plaintext = mcrypt_decrypt(self::CIPHER, $this->key, $ciphertext, self::MODE, $iv);
    return rtrim($plaintext, "\0");
}

如果我在同一服务器中加密和解密数据,那么它可以正常工作,但可以说服务器1正在进行加密,服务器2会收到解密请求。解密数据看起来不合适。我在解密后看到一些特殊字符。类似的东西 - JL! 2。两台服务器使用相同的代码和密钥进行加密和解密。

0 个答案:

没有答案