我对对称加密缺乏经验。我正在使用以下代码在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/)解密它,结果也类似。我怀疑我对加密工作原理的无知是责备,但任何帮助或教育都会受到赞赏。感谢。
答案 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'字符上添加了数据以将数据填充到块大小的倍数。