Spaces:
Running
Running
File size: 927 Bytes
9b0f4a0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
"""Python implementation of Arcfour encryption algorithm.
See https://en.wikipedia.org/wiki/RC4
This code is in the public domain.
"""
from typing import Sequence
class Arcfour:
def __init__(self, key: Sequence[int]) -> None:
# because Py3 range is not indexable
s = [i for i in range(256)]
j = 0
klen = len(key)
for i in range(256):
j = (j + s[i] + key[i % klen]) % 256
(s[i], s[j]) = (s[j], s[i])
self.s = s
(self.i, self.j) = (0, 0)
def process(self, data: bytes) -> bytes:
(i, j) = (self.i, self.j)
s = self.s
r = b""
for c in iter(data):
i = (i + 1) % 256
j = (j + s[i]) % 256
(s[i], s[j]) = (s[j], s[i])
k = s[(s[i] + s[j]) % 256]
r += bytes((c ^ k,))
(self.i, self.j) = (i, j)
return r
encrypt = decrypt = process
|