def rc4(key, data):

Initialize the state with the key

state = list(range(256))
j = 0
for i in range(256):
    j = (j + state[i] + key[i % len(key)]) % 256
    state[i], state[j] = state[j], state[i]

# Generate the keystream
i = 0
j = 0
keystream = bytearray()
for _ in range(len(data)):
    i = (i + 1) % 256
    j = (j + state[i]) % 256
    state[i], state[j] = state[j], state[i]
    k = state[(state[i] + state[j]) % 256]
    keystream.append(k)

# XOR the data with the keystream to encrypt or decrypt it
return bytes([d ^ k for d, k in zip(data, keystream)])

Example usage:

key = b'Hello World'
data = b'Hi its me im the problem its me'

encrypted_data = rc4(key, data)
decrypted_data = rc4(key, encrypted_data)

print(encrypted_data)
print(decrypted_data)

Edit
Pub: 19 Mar 2023 17:46 UTC
Views: 14