OpenSSL加密“零长度密码”错误

时间:2012-05-04 03:13:39

标签: php 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;

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

您可能还希望确保该文件仅供您阅读;否则密码可用于窥探。