php mcrypt CBC模式加密/解密问题


php mcrypt CBC mode encryption/decryption problem

当我尝试使用php的mcrypt扩展加密/解密某些文本时,CBC模式出现问题。我已经创建了一个类来执行此操作,它可以与CBC以外的其他模式配合使用。

问题如下:

我使用明文Even in cryptography, silence is golden。我做加密部分,到目前为止没有问题。但每次我尝试解密时,我都会得到这样的东西:9��'t"�cryptography, silence is golden。正如你所看到的,文本的前8个字符是错误的。我不知道是什么原因导致了这种行为。

我的类中处理这些操作的部分是:

public function encrypt($data)
    {
        $cypher = $this->_getCypher();
        $iv = $this->_getIv($cypher);
        return trim(base64_encode(mcrypt_encrypt($cypher, self::KEY, $data, MCRYPT_MODE_CBC, $iv)));
    }
    public function decrypt($data)
    {
        $cypher = $this->_getCypher();
        $iv = $this->_getIv($cypher);
        return trim(mcrypt_decrypt($cypher, self::KEY, base64_decode($data), MCRYPT_MODE_CBC, $iv));
    }
    protected function _getCypher()
    {
        return self::$_cyphers[$this->_algorithm];
    }
    protected function _getIv($cypher)
    {
        return mcrypt_create_iv(mcrypt_get_iv_size($cypher, MCRYPT_MODE_CBC), MCRYPT_RAND);
    }

上面的例子使用的算法是3DES。正如我之前所说,使用其他模式,如欧洲央行,一切都很好。

有什么建议吗?

您需要记住用于加密的IV,然后再次使用它进行解密。