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? 我在两个服务器(一个是第三方)之间进行通信,如果没有加密,在通信中传输的信息可能是安全漏洞。否则我会使用散列。此数据需要可由第三方使用密钥恢复。
重要:
----------------解决
版本:5.6.0 “不再接受无效的密钥和iv大小。如果输入无效,mcrypt_encrypt()将抛出警告并返回FALSE。以前密钥和IV用'\ 0'字节填充到下一个有效尺寸。“ - http://php.net/manual/en/function.mcrypt-encrypt.php
答案 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/>";