2012-05-04 43 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