【问题标题】:AES mcrypt_encrypt key sizeAES mcrypt_encrypt 密钥大小
【发布时间】:2015-03-13 07:13:12
【问题描述】:
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//works

----------------已解决

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

【问题讨论】:

  • 什么?我想你误会了。
  • 我根本没有改变我的问题,我只是根除难以阅读的代码,并改变了格式。问题是为什么我的加密无法解密,尽管它可以在 AESencyption.net 网站上解密。
  • 请将您的答案移至答案部分并将其从您的问题中删除。

标签: php encryption aes mcrypt


【解决方案1】:

使用 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/>";

【讨论】:

    猜你喜欢
    • 2015-09-16
    • 1970-01-01
    • 2015-08-24
    • 2016-11-03
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多