Perl 地穴 :CBC encrypts/decrypts only first list

标签 perl crypt cbc-mode

这是我的代码:

#!/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/

相关文章:

perl - 跳出 foreach 循环后,如何重新启动 "do-while"循环?

php - 如何替换 cakephp 密码哈希算法?

perl - 是否有一个 perl 模块来验证存储在 "{crypt}hashedpassword" "{ssha}hashedpassword" "{md5}hashedpassword"中的密码

php - 检查密码时,只关心前8个字符

Java CBC 解密有效,但 CTR 失败

perl - 如何使用perl单独获取linux进程ID

perl - 我在 Perl 中使用 Data::Dumper 序列化了我的数据。现在,当我评估它时,我得到 "Global symbol "$VAR 1"requires explicit package name"

c++ - AES 在 Qt 的 StringSource 和 StringSink 函数中无法正常工作

perl - 如何逐步运行 Perl 程序?

encryption - 使用相同的 key 和 IV 值进行多次加密调用