小Perl XOR解码脚本移植到Ruby



我有一点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: $decn";
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

我知道完全是一团糟,请帮助:)

仅查看堆栈溢出上的一些问题,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

最新更新