是否可以使用第三方实用程序解密使用php mcrypt_encode加密的文件?

时间:2010-06-03 18:57:18

标签: php encryption mcrypt

我对对称加密缺乏经验。我正在使用以下代码在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加密加密的任何东西。我尝试过使用blowfish并使用bcrypt(http://bcrypt.sourceforge.net/)解密它,结果也类似。我怀疑我对加密工作原理的无知是责备,但任何帮助或教育都会受到赞赏。感谢。

2 个答案:

答案 0 :(得分:1)

  

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

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

如果在实施之后您仍然遇到问题,那么您可以尝试使用AESCrypt mailing list并且无法联系开发人员并向PHP提供{cmpatible encryptor / decryptor sponsor development

答案 1 :(得分:0)

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

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

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