當我嘗試使用php的mcrypt擴展來加密/解密某些文本時,我遇到了CBC模式的問題。我創建了一個類來執行這個操作,它與其他模式,但CBC工作正常。php mcrypt 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,一切正常。
有什麼建議嗎?
請確保您加密MAC然後加密,否則您將很容易受到選擇密文攻擊。 – 2015-12-09 07:55:03