加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

如何使用php加密大文件并通过命令行解密?

发布时间:2020-05-25 08:53:59 所属栏目:PHP 来源:互联网
导读:我正在用 PHP编写一个小脚本来备份我的文件.在我从服务器传输文件之前,我想加密它们. 我在我的脚本的早期版本中通过在我的Linux服务器上使用exec()和OpenSSL来做到这一点.现在我正在寻找一个本机PHP函数来完成这项工作,主要是为了更好的错误处理. 问题是我的

我正在用 PHP编写一个小脚本来备份我的文件.在我从服务器传输文件之前,我想加密它们.

我在我的脚本的早期版本中通过在我的Linux服务器上使用exec()和OpenSSL来做到这一点.现在我正在寻找一个本机PHP函数来完成这项工作,主要是为了更好的错误处理.

问题是我的文件可能变大(如20gb).此外,我必须在shell上使用命令再次解密文件.

有谁知道如何加密PHP中的大文件,然后在命令行解密?

我现在正在使用PHP的mcrypt函数来加密:

// 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] = '';
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.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读