【问题标题】:How to use CBC encryption mode in PHPPHP中如何使用CBC加密模式
【发布时间】:2010-11-02 03:31:00
【问题描述】:

我正在尝试使用非 ECB 模式的 AES 加密 50-150 个字符长的字符串(由于安全问题)。我编写了一个加密类,并且能够在 ECB 模式下完美地加密/解密,但是当我切换到 CBC、CTR 或 OFB 模式时,我无法取回原始明文。

来源:

define('DEFAULT_ENCRYPTION_KEY', 'asdHRMfjkahguglw84tlrogl9y8kamaFDaufasds');

class Encryption
    {
    private $mode   = 'ctr';
    private $algo   = 'rijndael-128';
    private $td     = null;

    function __construct($key = DEFAULT_ENCRYPTION_KEY)
        {
        $this->td = mcrypt_module_open($this->algo, '', $this->mode, '');
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($this->td), MCRYPT_DEV_URANDOM);
        $key = substr($key, 0, mcrypt_enc_get_key_size($this->td));
        mcrypt_generic_init($this->td, $key, $iv);
        }

    public function encrypt($data)
        {
        $encrypted_data = mcrypt_generic($this->td, $data);
        return $encrypted_data;
        }   

    public function decrypt($data)
        {
        $decrypted_data = mdecrypt_generic($this->td, $data);
        $decrypted_data = rtrim($decrypted_data, "\0");
        return $decrypted_data;
        }

    function __destruct()
        {
        mcrypt_generic_deinit($this->td);
        mcrypt_module_close($this->td);
        }

    }

$crypt1 = new Encryption();
$enc = $crypt1->encrypt('hello world');

$crypt2 = new Encryption();
$dec = $crypt2->decrypt($enc);

echo $dec;

返回值 $dec,不等于 'hello world'。

有什么想法吗?

【问题讨论】:

    标签: php encryption mcrypt


    【解决方案1】:

    您似乎正在丢弃初始化向量$iv。您需要知道 IV 才能成功解密消息。 IV 不是秘密。它通常以某种封装格式与密文一起传递。

    由于没有块与块之间的反馈,ECB 不需要初始化向量。但是区块链模式需要一些数据来“引导”密码模式。

    【讨论】:

    • 嗯,但如果我使用这样的类,IV 应该保持不变: $crypt1 = new Encryption(); $enc = $crypt1->encrypt('hello world'); $dec = $crypt1->解密($enc);但是,它仍然会生成随机明文作为输出。
    • 这是假设 IV 存储在 $td 中的某个地方,但不一定如此。很难说这样做是好的设计,因为在大多数应用程序中,相同的密码对象不太可能加密和解密相同的消息,并且在加密多条消息时,应该为每条消息使用不同的 IV。
    猜你喜欢
    • 2011-08-31
    • 2012-05-11
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多