解密从命令行读入的文件

时间:2016-03-13 16:03:36

标签: perl encryption

我需要解密才能进入ROT-25,我认为我已经设置好了。接下来,它需要解密从命令行读入的文件以及我的问题所在的位置。我猜它必须像perl filename anyfile.txt一样运行,但我该如何设置呢?

#!/Strawberry/perl/bin/perl
 use v5.14;
my ($file1) = @ARGV;
open my $fh1, '<', $file1;
while (<$fh1>) {

sub encode_decode {
   shift =~ tr/A-Za-z/Z-ZA-Yz-za-y/r;
}

my $enc = encode_decode();
my $dec = encode_decode($enc);
say "Enc: ", $enc;
say "Dec: ", $dec;

}
close $fh1;

2 个答案:

答案 0 :(得分:1)

这里有几个问题。首先,使用与encode_decode()相同逻辑的函数对ROT25没有意义,仅适用于ROT13。要创建初始编码文件,可以使用Unix来执行此操作:

echo "The secret of getting ahead is getting started -- Mark Twain" | tr "A-Za-z" "Z-ZA-Yz-za-y" > encoded_twain.txt

然后在encoded_twain.txt上运行你的程序

因为你需要确定&#34;&#34;&#34;在文本中出现任何内容,逐行阅读文件并不是最好的选择。你最好把它作为单个字符串读取,然后解码和测试它。

你的解码器必须做与现在相反的事情(编码。)

总而言之,我们得到的结论是:

use English;

my $file_name = shift;

sub decode
{
    return shift =~ tr/Z-ZA-Yz-za-y/A-Za-z/r;
}

open my $file_handle, '<', $file_name;

my $encoded = '';

{   # allow us to read entire file in as a string:

    local $INPUT_RECORD_SEPARATOR = undef;

    $encoded = <$file_handle>;
}

close $file_handle;

my $decoded = &decode($encoded);

if ($decoded =~ m/(^| )the /m)  # make this more robust!
{
    print($decoded);
}

答案 1 :(得分:0)

只做一个小改动,要么声明一个变量来保持当前行(或使用$_):

open my $fh1, '<', $file1;
while ( my $line = <$fh1> ) {
    my $dec = decode( $line );
#   say "Dec: ", $dec;
}
close $fh1;

您可以测试&#34;&#34;的解码行。如果找到,请再次打开文件并打印所有行。