Sha256: 1550444c0eddba86cc6d7e2c85c4e51e77a9619a3db3f21b6445603d6031f9ca
Contents?: true
Size: 822 Bytes
Versions: 5
Compression:
Stored size: 822 Bytes
Contents
class RC4 def initialize(str) begin raise SyntaxError, "RC4: Key supplied is blank" if str.eql?('') @q1, @q2 = 0, 0 @key = [] str.each_byte {|elem| @key << elem} while @key.size < 256 @key.slice!(256..@key.size-1) if @key.size >= 256 @s = (0..255).to_a j = 0 0.upto(255) do |i| j = (j + @s[i] + @key[i] )%256 @s[i], @s[j] = @s[j], @s[i] end end end def encrypt!(text) process text end def encrypt(text) process text.dup end alias_method :decrypt, :encrypt private def process(text) text.unpack("C*").map { |c| c ^ round }.pack("C*") end def round @q1 = (@q1 + 1)%256 @q2 = (@q2 + @s[@q1])%256 @s[@q1], @s[@q2] = @s[@q2], @s[@q1] @s[(@s[@q1]+@s[@q2])%256] end end
Version data entries
5 entries across 4 versions & 2 rubygems