【问题标题】:OpenSSL Encryption "zero length password" ErrorOpenSSL 加密“零长度密码”错误
【发布时间】:2012-05-04 11:38:53
【问题描述】:

这就是我所拥有的:

$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 生成的密码有关。有什么办法让它正常工作?

谢谢!

【问题讨论】:

  • $password 生成后会发生什么?
  • @AdamLiss 哎呀。我不小心一条线和许多调试线一起。它是使用 file_put_contents 保存的

标签: php openssl


【解决方案1】:

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

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

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

您可能还想确保该文件只有您自己可以读取;否则密码可用于窥探。

【讨论】:

  • 谢谢。重新生成密码以删除换行符和 null 似乎可以解决此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
相关资源
最近更新 更多