【问题标题】:php mcrypt CBC mode encryption/decryption problemphp mcrypt CBC模式加解密问题
【发布时间】:2011-08-31 22:10:06
【问题描述】:

当我尝试使用 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,一切正常。

有什么建议吗?

【问题讨论】:

  • 确保您先加密然后 MAC,否则您将容易受到选择密文攻击。

标签: php cryptography mcrypt 3des


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-02-06
    • 2023-03-03
    • 2016-07-25
    • 1970-01-01
    • 2013-12-07
    • 2014-10-14
    • 2011-01-24
    • 2015-11-10
    • 2015-11-18
    相关资源
    最近更新 更多