根據OpenSSL
(https://www.openssl.org/docs/apps/enc.html#OPTIONS)的文檔,他們預計key
和iv
的值爲hex-digit
;這是否意味着只有數字?或將一個md5
散列做? (因爲md5
似乎不可逆)openssl_encrypt,openssl_decrypt密鑰,iv
- 注意我提到
key
和iv
因爲$password
在PHP
功能openssl_encrypt
是實際上的關鍵。
(幾乎)直接從PHP
評論(http://php.net/manual/en/function.openssl-encrypt.php)
function strtohex($x)
{
$s='';
foreach (str_split($x) as $c) $s.=sprintf("%02X",ord($c));
return($s);
}
$source = 'It works !';
$iv = substr(md5("123sdfsdf4567812345678"), 0, 16);
$pass = '1234567812345678';
$method = 'aes-256-cbc';
echo "\niv in hex to use: ".$iv;
echo "\nkey in hex to use: ".strtohex($pass);
echo "\n";
file_put_contents ('./file.encrypted',openssl_encrypt ($source, $method, $pass, true, $iv));
$exec = "openssl enc -".$method." -d -in file.encrypted -nosalt -nopad -K ".strtohex($pass)." -iv ".$iv;
echo 'executing: '.$exec."\n\n";
echo exec ($exec);
echo "\n";
糾正我,如果我錯了,但AES 256 CBC需要256位加密密鑰。這意味着你實際上需要生成32個隨機字節,而不是16個。 – vmrob 2015-06-08 17:07:51
你沒錯,那是我的錯誤 - 更新了答案。謝謝。 – Narf 2015-06-08 17:13:17