当我尝试使用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。正如我之前所说,使用其他模式,例如ECB,一切正常。
有什么建议吗?
答案 0 :(得分:3)
您需要记住用于加密的IV,并再次使用它进行解密。