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;

每隔一百次左右,passthru 会给我一个错误“零长度密码”,从 OpenSSL 传递。这与文件不存在时发生的错误“无法从 /private/tmp/7503675258rhTiX 读取密钥”不同。

我觉得这与 openssl_random_pseudo_bytes 生成的密码有关。有什么办法可以让它正常工作吗?

谢谢!

4

1 回答 1

1

根据OpenSSL docs,该-kfile选项从文件的第一行读取密码。这意味着密码包含文本,而不是二进制数据。

如果您的随机数据恰好以换行符开头,则文件中的第一“行”为空。所以我猜这个问题每两百五十六次左右就会出现一次。:-)

在将其存储到文件中之前尝试$password从二进制转换为可打印的十六进制字符,或者(如果您想要更大的密钥空间)丢弃不可打印的字节。

您可能还想确保文件只能由您读取;否则密码可用于窥探。

于 2012-05-04T03:33:17.393 回答