2012-04-10 40 views
1

我有一个小小的Perl代码(简单的XOR解密),我想将它移植到Ruby中以将它添加到另一个脚本中,但是我真的在Ruby中使用XOR编码/解码丢失了:Little Perl XOR解码脚本移植到Ruby

#!/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 
    @[email protected]_; 
    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 

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

+2

告诉我们的代码,让我们看看你有多远,你的尝试。在你的尝试中出了什么问题或有什么困难?一旦允许语言语法的差异,许多Perl函数都有Ruby等价物。 – 2012-04-10 16:26:54

+0

我的意思是我找不到任何地方如何使用XOR和Ruby下的密钥来解密加密的字符串。 – bsteo 2012-04-10 16:33:25

回答

2

只要看看一些在这里计算器的问题,看来红宝石不得有按位串运算符。 One post建议这可能会工作,以提供这样的运营商:

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 
+0

谢谢你,我会尝试。 – bsteo 2012-04-10 17:15:22

+0

我的伪Ruby脚本的任何帮助? :) – bsteo 2012-04-11 14:31:43

+0

OMG,这里没有红宝石大师:( – bsteo 2012-04-12 11:49:48