3

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

我试过谷歌搜索,发现很多关于如何使用 PHP 使用 AES 256 加密数据的信息,但是所有这些示例都使用现有的预生成密钥,而我需要在 PHP 中生成密钥。

4

3 回答 3

3

openssl-pkey-new()功能正是您正在寻找的。

至于 IV,您可以查看如何安全地为 AES CBC 加密生成 IV?建议使用openssl-random-pseudo-bytes

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

于 2013-06-24T18:41:56.773 回答
2

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

此函数使用的随机性来源如下:

  • 在 Windows 上,总是使用 » CryptGenRandom()。
  • 在 Linux 上,如果可用,将使用 » getrandom(2) 系统调用。
  • 在其他平台上,将使用 /dev/urandom。
  • 如果上述来源均不可用,则将抛出异常

有关更多信息,请参阅php 手册

于 2018-05-01T00:00:50.870 回答
1

If you don't want to rely on a library, you can use this function on Linux/Unix machines. It is identical to 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;
}
于 2015-04-25T08:37:46.963 回答