这是我的代码:
#!/usr/bin/perl -w
use Crypt::CBC;
my $scriptkey = qx(cat /tmp/scriptkeyfile);
chomp $scriptkey;
print new Crypt::CBC(-key=>"$scriptkey",-salt=>"my_salt")->encrypt(qx(cat $ARGV[0]));
此脚本仅加密给定文件的第一行。如果我将加密更改为解密,它只会解密给定文件的一行。如何更改此设置以加密整个文件。
最佳答案
qx
是列表上下文返回行列表,因此
->encrypt(qx( ... ))
结果
->encrypt($line1, $line2, $line3, ...)
但是
->encrypt($plaintext)
预计。在标量上下文中使用 qx
将整个输出作为一个标量返回。
my $file = qx( prog ... );
die("Can't execute prog: $!\n") if $? == -1;
die("prog killed by signal ".( $? & 0x7F )."\n") if $? & 0x7F;
die("prog exited with error ".( $? >> 8 )."\n") if $? >> 8;
my $cypher = Crypt::CBC->new( ... );
print $cypher->encrypt($file);
我假设您实际上并未使用 cat
,这只是一个示例。
关于Perl 地穴 :CBC encrypts/decrypts only first list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32010593/