AES mcrypt_encrypt密钥大小

时间:2015-01-14 23:10:54

标签: php encryption aes mcrypt

256 bit  = 256/8 = 32
192 bit = 192/8 = 24
128 bit = 128/8 = 16

<?PHP
include("AES.php"); // http://aesencryption.net/
    $string = "myawesometext to encrypt!";
    $key = "1234567890123456789012345";
    $block = 256;
    $aes = new AES($string, $key, $block);
    $enc = $aes->encrypt();
    $aes->setData($enc);
    $dec= $aes->decrypt();
    echo "After encryption: ".$enc."<br/>";
    echo "After decryption: ".$dec."<br/>";
?>

错误:mcrypt_decrypt():此算法不支持大小为25的密钥。仅支持尺寸为16,24或32的按键

当我使用本网站时:http://aesencryption.net/ 加密和解密工作完美。 PHP:5.6.3

更改密钥大小实际上不是一个选项,看看它应该如何工作。

为什么我使用AES? 我在两个服务器(一个是第三方)之间进行通信,如果没有加密,在通信中传输的信息可能是安全漏洞。否则我会使用散列。此数据需要可由第三方使用密钥恢复。

重要:

  • 当前PHP版本:5.6.3 //无效
  • 最后的PHP版本:5.5.15 //工作

----------------解决

版本:5.6.0 “不再接受无效的密钥和iv大小。如果输入无效,mcrypt_encrypt()将抛出警告并返回FALSE。以前密钥和IV用'\ 0'字节填充到下一个有效尺寸。“ - http://php.net/manual/en/function.mcrypt-encrypt.php

1 个答案:

答案 0 :(得分:0)

使用openssl_random_pseudo_bytes生成密钥。 openssl_random_pseudo_bytes将生成字节,因此您需要bin2hex来获取字母数字键。 bin2hex会将您生成的字节转换为ASCII编码的十六进制。

//To generate a 16 bytes key use this: 
$key = bin2hex(openssl_random_pseudo_bytes(8));
//24 bytes
$key = bin2hex(openssl_random_pseudo_bytes(12));
//32 bytes
$key = bin2hex(openssl_random_pseudo_bytes(16));
//To view the byte size:
echo "key byte size: ".strlen($key)."<br/>";