1

小さな Perl コード (単純な XOR 復号化) があり、それを Ruby に移植して別のスクリプトに追加したいのですが、Ruby での XOR エンコード/デコードで本当に迷っています:

#!/usr/bin/perl
# XOR password decoder
# Greets: Joni Salonen @ stackoverflow.com

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

print "Enter string to decode: ";
$str=<STDIN>;chomp $str; $str =~ s/\\//g;
$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));
}

perl での使用例:

$ perl cf6deca.pl
Enter string to decode: )4-H5GX\:&G\!6
Decoded string value: likearock

助けてくれてありがとう。

Rubyで次のようなものが欲しい:

key = ['3cb37efae7f4f376ebbd76cd'].pack('H*')

print "Enter string to decode: "
STDOUT.flush
a_string = gets
a_string.chomp!
a_string = a_string.gsub(/\//, "")
dec = decode(a_string)
puts "Decoded string value: "+dec

def decode(in)
        cipher = in.unpack('u')
        plain = cipher^key;
        plain.slice(len(cipher))
        return plain
end

私はTOTAL MESSであることを知っています、助けてください:)

4

1 に答える 1

2

ここでスタックオーバーフローに関するいくつかの質問を見るだけで、Ruby にはビットごとの文字列演算子がないように見えます。 ある投稿は、これがそのような演算子を提供するために機能する可能性があることを示唆しています:

class String
  def xor(key)
    text = dup
    text.length.times {|n| text[n] = (text[n].ord ^ key[n.modulo key.size].ord).chr }
    text
  end
end
于 2012-04-10T17:14:06.897 に答える