如何使用Perl编写加密的zip存档

时间:2015-02-19 19:09:04

标签: perl encryption zip expect

我希望将机密信息发送给可能不是太技术人员但无法使用GnuPG或其他复杂加密技术的收件人。因此,定义发送加密的Zip文件被认为是安全的。 Zip文件是首选,因为Microsoft Windows从XP开始支持开箱即用。

不幸的是,来自CPAN的Archive::Zip不支持编写加密档案。

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

1 个答案:

答案 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";