2013-06-24 141 views
1

如何使用PHP安全地生成适用于使用AES 256哈希数据的密钥?在PHP中为AES生成密钥256

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

+0

您是否尝试过谷歌您的问题?你有没有想出任何有用的东西?密钥是否需要在“php”中生成,或者简单地提供给您。大概你不会重复生成新的密钥 - 或者你会? – Floris

+1

密钥必须在php中生成。我发现什么都没有帮助。 – fibi

+3

我试图谷歌的问题,并找到了这个! –

回答

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这当然会教你一切你需要知道的......

+0

Erm,它产生一个PK密钥对,而不是一个aes密钥?除非我误解。 –

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; 
}