Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Perl编写加密的zip归档文件_Perl_Encryption_Zip_Expect - Fatal编程技术网

如何使用Perl编写加密的zip归档文件

如何使用Perl编写加密的zip归档文件,perl,encryption,zip,expect,Perl,Encryption,Zip,Expect,我想将机密信息发送给收件人,这些收件人可能不是太专业的人,也不会使用GnuPG或其他复杂的加密技术。因此,它被定义为发送加密的Zip文件是安全的™. Zip文件是首选文件,因为Microsoft Windows支持从XP开始的开箱即用文件 不幸的是,CPAN不支持编写加密档案 如何使用Perl编写加密的Zip文件?我没有找到直接使用Perl Zip库的方法。于是我开始远程控制命令行zip实用程序。最好的方法似乎是从CPAN #!/usr/bin/env perl use strict; use

我想将机密信息发送给收件人,这些收件人可能不是太专业的人,也不会使用GnuPG或其他复杂的加密技术。因此,它被定义为发送加密的Zip文件是安全的™. Zip文件是首选文件,因为Microsoft Windows支持从XP开始的开箱即用文件

不幸的是,CPAN不支持编写加密档案


如何使用Perl编写加密的Zip文件?

我没有找到直接使用Perl Zip库的方法。于是我开始远程控制命令行
zip
实用程序。最好的方法似乎是从CPAN

#!/usr/bin/env perl

use strict;
use warnings;

use Expect;

`touch foo`;

my $zip = Expect->new;
$zip->raw_pty(1);       # behave more like a pipe, disable echoing
$zip->log_stdout(0);    # don't print out from `zip`
$zip->spawn(qw<zip --encrypt foo.zip foo>);

my $password = "secret";
my $timeout  = 1;

for ( 1 .. 2 ) {

    # don't use a regex ref like qr/foo/ but a string like q/foo/ or 'foo'!
    $zip->expect( $timeout, -re => q/password:/ )
      or die "zip didn't ask for password";
    $zip->send( $password, "\n" );
}

my $success = $zip->expect( $timeout, -re => q/foo \((deflated|stored) / );

$zip->soft_close;

print $success ? "success" : "fail", "\n";
#/usr/bin/env perl
严格使用;
使用警告;
使用Expect;
`触摸foo`;
my$zip=Expect->new;
$zip->raw_pty(1);#行为更像管道,禁用回音
$zip->log_stdout(0);#不要从“zip”打印`
$zip->spawn(qw);
我的$password=“secret”;
我的$timeout=1;
对于(1..2){
#不要使用像qr/foo/这样的正则表达式引用,而是使用像q/foo/或'foo'这样的字符串!
$zip->expect($timeout,-re=>q/密码:/)
或者死“zip没有要求密码”;
$zip->send($password,“\n”);
}
我的$success=$zip->expect($timeout,-re=>q/foo\((泄气存储)/);
$zip->soft_close;
打印$success?“success”:“fail”、“\n”;

您如何传输zip文件?我可以建议您使用https Web服务器吗?这样您就不必太担心了,因为您的数据在传输过程中经过了加密。(在某些情况下,您可以使用客户端证书进行https,这给了您强大的身份验证/加密功能,而不需要太多的技术知识)@Sobrique:信息是通过电子邮件发送的。电子邮件没有足够广泛的加密方法。相反,文本存储在加密的Zip文件中,并附在电子邮件上。在电子邮件中发送https链接,要求他们从Web服务器获取信息?是的,这实际上是可能的。但这个问题并不是为了讨论这个问题e一般方法。这是由我的客户决定的。我只是没有找到Perl的模块,希望共享解决方案。每个人都可以自由选择加密的Zip文件或其他内容:-)@Sobrique:毕竟,请记住,加密容器的密码是独立于电子邮件传输的。通过电子邮件发送HTTPS链接将允许所有能够访问电子邮件传输或收件箱的人获得机密信息!我建议您看看7-Zip独立实用程序
7za.exe
。它允许在一个命令中完成整个过程
7za a-tzip-psecret foo.zip foo
@Borodin:我一直在寻找一种不会在进程列表中公开密码的解决方案。在命令行上传递密码之类的秘密是一个非常糟糕的主意。好吧,但是作为一个单独的字符串传递它以响应来自
zip
的提示并不安全。如果你必须使用远程系统,除了
ssh
之外,任何东西都不会对你有帮助。@Borodin:我已经考虑了你的评论一段时间了,真的不明白你的意思。问题在于如何在本地计算机上创建文件。我确保密码是,进程列表中的其他本地进程看不到密码,因为它是作为命令行参数传递的。在远程机器上执行此操作是一个完全不同的故事,但完全有可能,例如,通过SSH传输您提到的所有内容。因此,实际上SSH不是必需的,但如果您启动远程执行,它就是解决方案。那你的意思是什么?