2013-06-24 185 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; 
}