我正在用
PHP编写一个小脚本来备份我的文件.在我从服务器传输文件之前,我想加密它们.
我在我的脚本的早期版本中通过在我的Linux服务器上使用exec()和OpenSSL来做到这一点.现在我正在寻找一个本机PHP函数来完成这项工作,主要是为了更好的错误处理.
问题是我的文件可能变大(如20gb).此外,我必须在shell上使用命令再次解密文件.
// IV: $iv = mcrypt_create_iv($ivSize,MCRYPT_RAND); // Create new random Key: $key = openssl_random_pseudo_bytes(32); // Encrypt: $fileStream = fopen($file,"r"); $encFileStream = fopen($file . ".enc.data","w"); $opts = [ 'iv' => $iv,'key' => $key,'mode' => 'cbc' ]; stream_filter_append($encFileStream,'mcrypt.rijndael-256',STREAM_FILTER_WRITE,$opts); stream_copy_to_stream($fileStream,$encFileStream); fclose($fileStream); fclose($encFileStream); // Encrypt random generated key and save it: $encryptedKey = null; openssl_public_encrypt($key,$encryptedKey,$publickey); file_put_contents($file . ".enc.key",$encryptedKey); // Save Initial Vetor: file_put_contents($file . ".enc.iv",$iv); // Delete unencrypted file: unlink($file);
现在要在linux命令行上解密我也尝试使用mcrypt.但我遇到的最大问题是我不知道如何将IV添加到mdecrypt.到目前为止,我的命令是:
mdecrypt --decrypt -m CBC -f key.key archive_hallo.tar.gz.enc.data
这当然不起作用,因为缺少IV.那么,有没有人知道如何将IV添加到我的mdecrypt命令中?
来自mcrypt_2.6.8 debian软件包
expects the specific file format with header的mdecrypt CLI工具.搜索write_file_head函数,它显示mcrypt / mdecrypt工具格式的前3个字节:
buf[0] = '\0'; buf[1] = 'm'; buf[2] = '\3';
标题应该有特殊的位设置,并且IV嵌入到文件中.它将被读取here,in decrypt_general
function:
if (_mcrypt_iv_is_needed(td,mode,noiv) != 0) { IV = read_iv(FROMF,mcrypt_enc_get_iv_size(td)); } else { IV = _mcrypt_calloc(1,mcrypt_enc_get_iv_size(td)); }
和read_iv在extra.c中定义为:
void *read_iv(FILE * fstream,int ivsize) { char *IV; ... // malloc fread(IV,1,ivsize,fstream); return IV; }
因此,只需检查加密文件的前N个字节(您可以在hexdump -C之后将它们发布在此处)并检查mcrypt标头(0x00’m’0x03)和您的IV.如果是 – 那么mdecrypt工具应该从文件中获取IV.如果不是 – 不支持在mdecrypt中通过命令行设置IV,但是你可以入侵源代码,为iv添加新选项,然后修改decrypt_general以从选项中读取iv.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。