]>
Commit | Line | Data |
---|---|---|
f14f0b7b CP |
1 | class RC4: |
2 | def __init__(self, key): | |
3 | s = range(256) | |
4 | for i in xrange(256): | |
5 | s[i] = i | |
6 | j = 0 | |
7 | for i in xrange(256): | |
8 | j = (j + s[i] + ord(key[i % len(key)])) % 256 | |
9 | s[j], s[i] = s[i], s[j] | |
10 | self.__s = s | |
11 | ||
12 | def crypt(self, data): | |
13 | ret = [] | |
14 | i = 0 | |
15 | j = 0 | |
16 | for r in xrange(len(data)): | |
17 | i = (i + 1) % 256 | |
18 | j = (j + self.__s[i]) % 256 | |
19 | self.__s[i], self.__s[j] = self.__s[j], self.__s[i] | |
20 | ret.append(chr(ord(data[r]) ^ self.__s[(self.__s[i] + self.__s[j]) % 256])) | |
21 | return "".join(ret) | |
22 | ||
23 |