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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了如何使用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] = '\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.

脚本宝典总结

以上是脚本宝典为你收集整理的如何使用php加密大文件并通过命令行解密?全部内容,希望文章能够帮你解决如何使用php加密大文件并通过命令行解密?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。