如何在PHP中进行AES256解密?

Jer*_*gan 5 php aes mcrypt

我有一个加密的文本,我需要解密.它是用AES-256-CBC加密的.我有加密的文本,密钥和iv.然而,无论我尝试什么,我似乎无法让它工作.

互联网已经建议mcrypt的Rijndael密码能够做到这一点,所以这就是我现在所拥有的:

function decrypt_data($data, $iv, $key) {
    $cypher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

    // initialize encryption handle
    if (mcrypt_generic_init($cypher, $key, $iv) != -1) {
        // decrypt
        $decrypted = mdecrypt_generic($cypher, $data);

        // clean up
        mcrypt_generic_deinit($cypher);
        mcrypt_module_close($cypher);

        return $decrypted;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

现在,我得到2个警告,输出是胡言乱语:

Warning: mcrypt_generic_init() [function.mcrypt-generic-init]: Key size too large; supplied length: 64, max: 32 in /var/www/includes/function.decrypt_data.php on line 8
Warning: mcrypt_generic_init() [function.mcrypt-generic-init]: Iv size incorrect; supplied length: 32, needed: 16 in /var/www/includes/function.decrypt_data.php on line 8
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

Fra*_*mer 6

我对这些东西并不十分熟悉,但似乎MCRYPT_RIJNDAEL_256代替MCRYPT_RIJNDAEL_128下一步将是明显的下一步......

编辑:你是对的 - 这不是你需要的.MCRYPT_RIJNDAEL_128实际上是正确的选择.根据您提供的链接,您的密钥和IV的长度应该是它们的两倍:

// How do you do 256-bit AES encryption in PHP vs. 128-bit AES encryption???
// The answer is:  Give it a key that's 32 bytes long as opposed to 16 bytes long.
// For example:
$key256 = '12345678901234561234567890123456';
$key128 = '1234567890123456';

// Here's our 128-bit IV which is used for both 256-bit and 128-bit keys.
$iv =  '1234567890123456';
Run Code Online (Sandbox Code Playgroud)

  • 结果是十六进制编码,只需要通过`pack('H*',$ var)`运行. (2认同)