解密PHP中的CryptoJS-IV在哪里


Decrypt CryptoJS in PHP - where does the IV go

我使用此函数来提供一个自定义密钥,用于使用CryptoJS 加密字符串

function doHash(msg){
    msg = String(msg);
    var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
    var iv  = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');
    var encrypted = CryptoJS.AES.encrypt(msg, key, { iv: iv });
    return encrypted;
}

我不提供密码短语,而是直接提供IV和密钥进行加密

现在我需要用PHP解密密文:这就是我发现的:

function aes_decrypt($encrypted,$key)
{
    // if $encrypted is HEXed, then return it to binary
    $encrypted = pack('H*',$encrypted);
    $key = mysql_aes_key($key);
    return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,$encrypted,MCRYPT_MODE_ECB,''),"'x00..'x1F");
}

这是mCrypt的解密AES函数的直接示例。

我看不出IV去哪里解密这个。我失踪了吗什么,解密时不需要IV吗?

从文档中可以看出:

string mcrypt_decrypt ( string $cipher , string $key , string $data , 
                        string $mode [, string $iv ] )

所以最后一个论点是IV应该去哪里。在当前代码中,您正在传递一个空字符串('')。