2012-05-04 66 views
0

這是我有:的OpenSSL加密「零長度密碼」錯誤

$password = openssl_random_pseudo_bytes(245); 
$passwdtemp = tempnam('/tmp', mt_rand()); 
file_put_contents($passwdtemp, $password); 
passthru('openssl aes-256-cbc -salt -in infile.png -out outfile.png -kfile ' . $passwdtemp; 

每隔一百次左右,中繼會給我錯誤「零長度的密碼」,從OpenSSL的通過。這與錯誤'不能從/ private/tmp/7503675258rhTiX讀取密鑰'不同,該錯誤在文件不存在時發生。

我感覺它與openssl_random_pseudo_bytes生成的密碼有關。任何方式讓這個工作正常?

謝謝!

+0

'$ password'生成後會發生什麼? –

+0

@AdamLiss哎呀。我不小心連線了許多調試線。它使用file_put_contents – Tech163

回答

1

根據OpenSSL docs-kfile選項從文件的第一行讀取密碼。這意味着密碼包含文本,而不是二進制數據。

如果您的隨機數據碰巧以換行符開始,那麼文件中的第一個「行」是空的。所以我估計這個問題每兩百五十六次發生一次。 :-)

嘗試將$password從二進制轉換爲可打印的十六進制字符,然後再將它存儲在文件中,或者(如果您想要更大的密鑰空間)丟棄不可打印的字節。

您可能還想確保文件只能由您讀取;否則密碼可用於窺探。

+1

保存謝謝。重新生成密碼以刪除換行符和null似乎解決了這個問題。 – Tech163