这就是我所拥有的:
$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生成的密码有关。有什么方法可以让它正常工作吗?
谢谢!
答案 0 :(得分:1)
根据OpenSSL docs,-kfile
选项从文件的第一行读取密码。这意味着密码包含文本,而不是二进制数据。
如果您的随机数据恰好以换行符开头,则文件中的第一个“行”为空。所以我猜这个问题每两百五十六次左右发生一次。 : - )
尝试将$password
从二进制文件转换为可打印的十六进制字符,然后再将其存储在文件中,或者(如果需要更大的密钥空间)丢弃不可打印的字节。
您可能还希望确保该文件仅供您阅读;否则密码可用于窥探。