2011-05-24 198 views
4

當我嘗試使用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,一切正常。

有什麼建議嗎?

+0

請確保您加密MAC然後加密,否則您將很容易受到選擇密文攻擊。 – 2015-12-09 07:55:03

回答

3

您需要記住您用於加密的IV並將其用於解密。

+0

當然,我忘了那個。謝謝! – misterjinx 2011-05-24 13:38:46