From: Jim Cain Date: 2008-09-05T09:38:53+09:00 Subject: Re: Arcfour encryption algorithm ------=_Part_38018_31982994.1220575477887 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline I've been using this implementation for a while. Unfortunately, the file doesn't have any author info in it, and I can't find it in Google any longer, so I'm not sure who deserves credit for it. I also make this patch to it: class ARC4 def setup(key) #@init_s = Array.new(256) { |i| i } @init_s = '' 0.upto(255) { |i| @init_s << i } j = 0 for i in 0 .. 255 j = (j + @init_s[i] + key[i % key.size]) & 0xff @init_s[i], @init_s[j] = @init_s[j], @init_s[i] end reset end def reset @s = @init_s.dup @i = 0 @j = 0 end end Cheers, Jim ------=_Part_38018_31982994.1220575477887 Content-Type: application/octet-stream; name=arc4.rb Content-Transfer-Encoding: base64 X-Attachment-Id: f_fkq32xrl0 Content-Disposition: attachment; filename=arc4.rb IyBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUkM0IGVuY3J5cHRpb24gYWxnb3Jp dGhtLCB0aGUKIyAiYWxsZWdlZCIgUkM0IGFsZ29yaXRobSBkZXZlbG9wZWQgYnkgUlNBIFNlY3Vy aXR5LCBJbmMuIGluIFJ1YnkuCiMKIyBIZXJlIGlzIHRoZSBkZXNjcmlwdGlvbiBmcm9tIFJTQSBM YWJvcmF0b3JpZXMnIEZBUToKIwojICBSQzQgaXMgYSBzdHJlYW0gY2lwaGVyIGRlc2lnbmVkIGJ5 IFJpdmVzdCBmb3IgUlNBIERhdGEgU2VjdXJpdHkgKG5vdwojICBSU0EgU2VjdXJpdHkpLiBJdCBp cyBhIHZhcmlhYmxlIGtleS1zaXplIHN0cmVhbSBjaXBoZXIgd2l0aAojICBieXRlLW9yaWVudGVk IG9wZXJhdGlvbnMuIFRoZSBhbGdvcml0aG0gaXMgYmFzZWQgb24gdGhlIHVzZSBvZiBhCiMgIHJh bmRvbSBwZXJtdXRhdGlvbi4gQW5hbHlzaXMgc2hvd3MgdGhhdCB0aGUgcGVyaW9kIG9mIHRoZSBj aXBoZXIgaXMKIyAgb3ZlcndoZWxtaW5nbHkgbGlrZWx5IHRvIGJlIGdyZWF0ZXIgdGhhbiAxMF4x MDAuIEVpZ2h0IHRvIHNpeHRlZW4KIyAgbWFjaGluZSBvcGVyYXRpb25zIGFyZSByZXF1aXJlZCBw ZXIgb3V0cHV0IGJ5dGUsIGFuZCB0aGUgY2lwaGVyIGNhbgojICBiZSBleHBlY3RlZCB0byBydW4g dmVyeSBxdWlja2x5IGluIHNvZnR3YXJlLiBJbmRlcGVuZGVudCBhbmFseXN0cwojICBoYXZlIHNj cnV0aW5pemVkIHRoZSBhbGdvcml0aG0gYW5kIGl0IGlzIGNvbnNpZGVyZWQgc2VjdXJlLgojCiMg RG9uJ3QgdGFrZSB0aGUgImVpZ2h0IHRvIHNpeHRlZW4gbWFjaGluZSBvcGVyYXRpb25zIiBwYXJ0 IHRvbyBzZXJpb3VzLAojIGJlY2F1c2UgdGhpcyBpcyBhIFJ1YnkgaW1wbGVtZW50YXRpb24uIDsp CiMKIyBPbmUgc2hvdWxkIG5ldmVyIHVzZSB0aGUgc2FtZSBrZXkgdHdpY2UgdG8gZW5jcnlwdCBh IGNsZWFydGV4dCBzdHJlYW0KIyB3aXRoIFJDNCAob3IgYW55IG90aGVyIHN0cmVhbSBjaXBoZXIp LiBTbyBtYWtlIHN1cmUgdG8KIyAxLiBjb21wdXRlIGEgZGlmZmVyZW50IGtleSBlYWNoIHRpbWUg b3IKIyAyLiBoYXNoIHRoZSBrZXkgd2l0aCBhIHVuaXF1ZSBpbml0aWFsaXphdGlvbiB2ZWN0b3Ig KElWKSBhbmQgc2VuZAojICAgIHRoZSBJViBhbG9uZyB3aXRoIHRoZSBtZXNzYWdlLgojCiMgSXQn cyBhbHNvIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGRpc2NhcmQgYXQgbGVhc3QgdGhlIGZpcnN0 IDI1NiBieXRlcwojIG9mIHRoZSB0aGUgY2lwaGVyIG91dHB1dCAoYnkgdXNpbmcgdGhlIEFSQzQj c2tpcCBtZXRob2QpIHRvIGF2b2lkCiMgZXhwb3NpbmcgdGhlIGtleSAoRmx1aHJlciwgTWFydGlu IGFuZCBTaGFtaXIgYXR0YWNrKS4KIwpjbGFzcyBBUkM0ICAgCgogICMgQW4gQVJDNCBvYmplY3Qg aXMgY29uc3RydWN0ZWQsIGJ5IHVzaW5nIHRoZSBhcmd1bWVudCA8Y29kZT5rZXk8L2NvZGU+CiAg IyBmb3IgdGhlIGtleSBzZXR1cCBvZiB0aGUgQVJDNCBhbGdvcml0aG0uCiAgZGVmIGluaXRpYWxp emUoa2V5KQogICAgc2V0dXAga2V5CiAgZW5kCgogICMgVGhlIGFyZ3VtZW50IDxjb2RlPnRleHQ8 L2NvZGU+IGhhcyB0byB1bmRlcnN0YW5kICNbXSwgI1tdPSBhbmQgI2Nsb25lLAogICMgYW5kIGl0 cyBlbGVtZW50cyBzaG91bGQgYmUgYnl0ZXMuCiAgIyBBIGNyeXB0ZWQgdmVyc2lvbiBvZiB0aGlz IG9iamVjdCBpcyByZXR1cm5lZC4KICBkZWYgY3J5cHQodGV4dCkKICAgIGNyeXB0ISh0ZXh0LmNs b25lKQogIGVuZAoKICAjIFRoZSBhcmd1bWVudCA8Y29kZT50ZXh0PC9jb2RlPiBoYXMgdG8gdW5k ZXJzdGFuZCAjW10gYW5kICNbXT0gYW5kIGlzCiAgIyBjcnlwdGVkIGluIHBsYWNlLiBJdHMgZWxl bWVudHMgc2hvdWxkIGJlIGJ5dGVzLgogIGRlZiBjcnlwdCEodGV4dCkKICAgIGZvciBjIGluIDAg Li4uIHRleHQuc2l6ZQogICAgICBAaSA9IChAaSArIDEpICYgMHhmZgogICAgICBAaiA9IChAaiAr IEBzW0BpXSkgJiAweGZmCiAgICAgIEBzW0BpXSwgQHNbQGpdID0gQHNbQGpdLCBAc1tAaV0KICAg ICAgdGV4dFtjXSBePSBAc1sgKEBzW0BpXSArIEBzW0BqXSkgJiAweGZmIF0KICAgIGVuZAogICAg dGV4dAogIGVuZAoKICAjIFRoZSBuZXh0IDxjb2RlPmJ5dGVzPC9jb2RlPiBieXRlcyBhcmUgc2tp cHBlZCBpbiB0aGlzIGNpcGhlciBzdHJlYW0uCiAgZGVmIHNraXAoYnl0ZXMpCiAgICBieXRlcy50 aW1lcyBkbwogICAgICBAaSA9IChAaSArIDEpICYgMHhmZgogICAgICBAaiA9IChAaiArIEBzW0Bp XSkgJiAweGZmCiAgICAgIEBzW0BpXSwgQHNbQGpdID0gQHNbQGpdLCBAc1tAaV0KICAgIGVuZAog IGVuZAoKICBwcml2YXRlCgogICMgU2V0cyB1cCB0aGUgQVJDNCBvYmplY3QgYWNjb3JkaW5nIHRv IHRoZSBnaXZlbiBrZXkuIFRoZQogICMga2V5IGhhcyB0byBncm9rIHRoZSAjW10gbWV0aG9kLgog IGRlZiBzZXR1cChrZXkpCiAgICBAcyA9IEFycmF5Lm5ldygyNTYpIHsgfGl8IGkgfQogICAgaiA9 IDAKICAgIGZvciBpIGluIDAgLi4gMjU1CiAgICAgIGogPSAoaiArIEBzW2ldICsga2V5W2kgJSBr ZXkuc2l6ZV0pICYgMHhmZgogICAgICBAc1tpXSwgQHNbal0gPSBAc1tqXSwgQHNbaV0KICAgIGVu ZAogICAgQGkgPSAwICAgCiAgICBAaiA9IDAgICAKICBlbmQKCmVuZAo= ------=_Part_38018_31982994.1220575477887--