Crypto.Cipher.ARC4, bust or me doing something wrong?

Jp Calderone exarkun at divmod.com
Tue Sep 20 12:26:16 EDT 2005


On Tue, 20 Sep 2005 16:08:19 +0100, Michael Sparks <michaels at rd.bbc.co.uk> wrote:
>Hi,
>
>
>I suspect this is a bug with AMK's Crypto package from
>http://www.amk.ca/python/code/crypto , but want to
>check to see if I'm being dumb before posting a bug
>report.
>
>I'm looking at using this library and to familiarise myself writing
>small tests with each of the ciphers. When I hit Crypto.Cipher.ARC4 I've
>found that I can't get it to decode what it encodes. This might be a
>case of PEBKAC, but I'm trying the following:
>
>>>> from Crypto.Cipher import ARC4 as cipher
>>>> key = "........"
>>>> obj = cipher.new(key)
>>>> obj.encrypt("This is some random text")
>')f\xd4\xf6\xa6Lm\x9a%}\x8a\x95\x8ef\x00\xd6:\x12\x00!\xf3k\xafX'
>>>> X=_
>>>> X
>')f\xd4\xf6\xa6Lm\x9a%}\x8a\x95\x8ef\x00\xd6:\x12\x00!\xf3k\xafX'
>>>> obj.decrypt(X)
>'\x87\xe1\x83\xc1\x93\xdb\xed\x93U\xe4_\x92}\x9f\xdb\x84Y\xa3\xd4b\x9eHu~'
>
>Clearly this decode doesn't match the encode. Me being dumb or bug?
>
>Any comments welcome :)
>

You need two ARC4 instances.  Performing any operation alters the internal state (as it is a stream cipher), which is why your bytes did not come out intact.

  >>> import Crypto.Cipher.ARC4 as ARC4
  >>> o = ARC4.new('hello monkeys')
  >>> p = ARC4.new('hello monkeys')
  >>> p.decrypt(o.encrypt('super secret message of doom'))
  'super secret message of doom'
  >>>

Jp



More information about the Python-list mailing list