我希望将机密信息发送给可能不是太技术人员但无法使用GnuPG或其他复杂加密技术的收件人。因此,定义发送加密的Zip文件被认为是安全的。 Zip文件是首选,因为Microsoft Windows从XP开始支持开箱即用。
不幸的是,来自CPAN的Archive::Zip
不支持编写加密档案。
我们如何使用Perl编写加密的Zip文件?
答案 0 :(得分:3)
我没有找到直接使用任何Perl Zip库的方法。所以我要远程控制命令行zip
实用程序。这样做的最佳方法似乎是来自CPAN的Expect
。
#!/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";