0

これは私が持っているものです:

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

100回程度に1回、passthruは、OpenSSLから渡された「長さゼロのパスワード」というエラーを表示します。これは、ファイルが存在しない場合に発生する「/ private / tmp/7503675258rhTiXからキーを読み取れません」というエラーとは異なります。

私はそれがopenssl_random_pseudo_bytesによって生成されたパスワードと関係があると感じています。これを正しく機能させる方法はありますか?

ありがとう!

4

1 に答える 1

1

OpenSSL docsによると、-kfileオプションはファイルの最初の行からパスワードを読み取ります。これは、パスワードにバイナリ データではなくテキストが含まれていることを意味します。

ランダム データがたまたま改行文字で始まっている場合、ファイルの最初の「行」は空です。したがって、この問題は 256 回に 1 回程度発生すると推測されます。:-)

$passwordファイルに保存する前にバイナリから印刷可能な 16 進文字に変換するか、(より大きなキー スペースが必要な場合) 印刷できないバイトを破棄してみてください。

ファイルを自分だけが読み取れるようにすることもできます。それ以外の場合、パスワードはスヌーピングに使用できます。

于 2012-05-04T03:33:17.393 に答える