1

私はこのスクリプトを持っています、うまくいきます:

#!/usr/bin/perl

$key = pack("H*","3cb37efae7f4f376ebbd76cd");

$str = "&4\=80CHB'";
$dec = decode($str);
print "Decoded string value: $dec\n";

sub decode{ #Sub to decode
    @subvar=@_;
    my $sqlstr = $subvar[0];
    $cipher = unpack("u", $sqlstr);
    $plain = $cipher^$key;
    return substr($plain, 0, length($cipher));
}

STDIN から $str 変数を取得するように変更すると、すべての結果が台無しになります。

#!/usr/bin/perl

$key = pack("H*","3cb37efae7f4f376ebbd76cd");

print "Enter string to decode: ";
$str=<STDIN>;chomp $str;
$dec = decode($str);
print "Decoded string value: $dec\n";

sub decode{ #Sub to decode
    @subvar=@_;
    my $sqlstr = $subvar[0];
    $cipher = unpack("u", $sqlstr);
    $plain = $cipher^$key;
    return substr($plain, 0, length($cipher));
}

最初のスクリプトは問題なく動作し、結果は次のとおりです。

デコードされた文字列値: mentos

2 番目のスクリプトは不適切です。

デコードされた文字列値: ot&¸ÝÖóvë½vÍ

私が間違っていることについて何か考えはありますか?ありがとう!

4

1 に答える 1

3

元のコードは

$str = "&4\=80CHB'";

何らかの理由でエスケープされた等号が含まれています。と同じです

$str = "&4=80CHB'";

&4=80CHB'そのため、変更したコードを入力する必要があります。

于 2012-04-10T15:20:59.627 に答える