You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

29 lines
726 B

4 years ago
  1. """ Python implementation of Arcfour encryption algorithm.
  2. This code is in the public domain.
  3. """
  4. class Arcfour:
  5. def __init__(self, key):
  6. s = list(range(256))
  7. j = 0
  8. klen = len(key)
  9. for i in range(256):
  10. j = (j + s[i] + key[i % klen]) % 256
  11. (s[i], s[j]) = (s[j], s[i])
  12. self.s = s
  13. (self.i, self.j) = (0, 0)
  14. def process(self, data):
  15. (i, j) = (self.i, self.j)
  16. s = self.s
  17. r = []
  18. for c in data:
  19. i = (i+1) % 256
  20. j = (j+s[i]) % 256
  21. (s[i], s[j]) = (s[j], s[i])
  22. k = s[(s[i]+s[j]) % 256]
  23. r.append(c ^ k)
  24. (self.i, self.j) = (i, j)
  25. return bytes(r)