如何使用 PHP 安全地生成适合使用 AES 256 散列数据的密钥?
我试过谷歌搜索,发现很多关于如何使用 PHP 使用 AES 256 加密数据的信息,但是所有这些示例都使用现有的预生成密钥,而我需要在 PHP 中生成密钥。
该openssl-pkey-new()
功能正是您正在寻找的。
至于 IV,您可以查看如何安全地为 AES CBC 加密生成 IV?建议使用openssl-random-pseudo-bytes
但是如果你真的在寻找一个有用的页面,谷歌“在 PHP 中实现 AES” - 作为第一个点击,你会发现http://www.movable-type.co.uk/scripts/aes-php.html这肯定会教你所有你需要知道的...
从 php7 开始,您可以使用 random_bytes() 函数来生成加密安全的伪随机字节。
此函数使用的随机性来源如下:
有关更多信息,请参阅php 手册
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;
}