1

我对对称加密没有经验。我正在使用以下代码在 php 中加密 pdf 文件:

$source_filepath = RB::get('docroot') . RB::get('baseUrl') . '/submissions/' . $this->_filename;
$encrypted_filepath =  $source_filepath . '.nc';
$pdf_data = file_get_contents($source_filepath);
$encrypted_data = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, '1234567812345678', $pdf_data, MCRYPT_MODE_ECB);
file_put_contents($encrypted_filepath, $encrypted_data);

然后我需要在 php 之外解密它,可能使用另一台计算机上的桌面应用程序/实用程序。我试图用 aescrypt 实用程序(http://www.aescrypt.com/)解密文件,它告诉我:

“错误:错误的文件头(不是 aescrypt 文件或已损坏?[c, fffffff0, fffffffe])”

以及告诉我的 mcrypt 命令:文件 thefile.pdf.nc 未成功解密。

我还没有能够解密任何用 php 之外的 encrypt 加密的东西。我曾尝试使用河豚并使用 bcrypt ( http://bcrypt.sourceforge.net/ ) 对其进行解密,结果也相似。我怀疑我对加密如何工作的无知是罪魁祸首,但任何帮助或教育将不胜感激。谢谢。

4

2 回答 2

1

我正在使用以下代码在 php 中加密 pdf 文件:

您从 aescrypt 收到错误的原因是因为您正在编写的文件与 AEScrypt 文件格式无关。幸运的是,AESCrypt 的开发者已经提供了非常详细的文件格式说明。

如果在实施之后您仍然遇到问题,那么您可以尝试AESCrypt 邮件列表,如果失败了,您甚至可以联系开发人员并提议赞助PHP 中 cmpatible 加密器/解密器的开发。

于 2010-06-03T19:25:36.720 回答
0

我不知道 PHP 或 mcrypt,但仅基于调用行,我怀疑您可以使用 openssl 命令行实用程序解密文件。以下示例应该接近您的需要:

 openssl aes-128-ecb -d -K 303132333435363738303132333435363738 -iv 00000000000000000000000000000000 -P -nopad -nosalt -in cipherfile -out plainfile

注意:您必须自己剥离任何填充物。mcrypt_encrypt 显然添加了 '\0' 字符以将数据填充到块大小的倍数。

于 2010-06-04T12:41:34.310 回答