在PHP中为AES 256生成密钥

时间:2013-06-24 16:05:43

标签: php key aes

如何使用PHP安全地生成适合使用AES 256散列数据的密钥?

我尝试使用Google搜索并发现了大量有关如何使用AES使用AES加密数据的信息,但所有这些示例都使用了现有的预生成密钥,我需要在PHP中生成密钥。

3 个答案:

答案 0 :(得分:2)

openssl-pkey-new()功能正是您所需要的。

对于IV,您可以查看建议使用How to securely generate an IV for AES CBC Encryption?

openssl-random-pseudo-bytes

但如果你真的在寻找一个有用的页面,谷歌“用PHP实现AES” - 作为第一个打击,你会发现http://www.movable-type.co.uk/scripts/aes-php.html肯定会教你一切你需要知道的......

答案 1 :(得分:1)

如果您不想依赖库,可以在Linux / Unix机器上使用此功能。它与openssl-random-pseudo-bytes

相同
<?php
$key_size = 256;  //For a 256 bit key, you can use 128 or 512 as well. 
$key = uuid_gen(($key_size / 8)); //8 bits in a byte

echo 'key length is ' .strlen($key) ."\n"; //The number of bytes

/* Returns Raw Binary */
function uuid_gen($length) {

    $fp = @fopen('/dev/urandom','rb');

    if ($fp !== FALSE) {
        $result .= @fread($fp, $length);
        @fclose($fp);
    } else {
        trigger_error('Can not open /dev/urandom.');
    }

    return $result;
}

答案 2 :(得分:1)

从php7开始,您可以使用random_bytes()函数生成加密安全的伪随机字节。

此功能使用的随机源如下:

  • 在Windows上,»将始终使用CryptGenRandom()。
  • 在Linux上,如果可用,将使用»getrandom(2)系统调用。
  • 在其他平台上,将使用/ dev / urandom。
  • 如果没有上述来源,那么a 将抛出异常

请参阅php manual了解详情