如何使用PHP安全地生成适合使用AES 256散列数据的密钥?
我尝试使用Google搜索并发现了大量有关如何使用AES使用AES加密数据的信息,但所有这些示例都使用了现有的预生成密钥,我需要在PHP中生成密钥。
答案 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()函数生成加密安全的伪随机字节。
此功能使用的随机源如下:
请参阅php manual了解详情