Algoritmo de criptografía Arc4

#!/usr/bin/python
# -*- coding: utf-8 -*-
# WEB blog.hackxcrack.es

class ARC4:
    S = []
    i = 0
    j = 0

    def inicializacion(self, k):
        S = range(256)
        j = 0
        for i in xrange(256):                       
            j = (j + S[i] + ord(k[i % len(k)])) % 256 
            S[i], S[j] = S[j], S[i]                  

        self.S = S

    def __init__(self, clave):
        self.inicializacion(clave)

    def siguienteByte(self):
        self.i = (self.i + 1) % 256 
        self.j = (self.j + self.S[self.i]) % 256
        self.S[self.i], self.S[self.j] = self.S[self.j], self.S[self.i]
        K = self.S[(self.S[self.i] + self.S[self.j]) % 256]
        print self.S[(self.S[self.i] + self.S[self.j]) % 256], # AL PONER LA , CAMBIAMOS IMPRESION DE VERTICAL A HORIZONTAL
        return K

    def cifra(self, texto):
        cifrado = []                              
        for caracter in texto:                    
            byte_texto = ord(caracter)            
            byte_clave = self.siguienteByte()     

            byte_cifrado = byte_texto ^ byte_clave   # XOR !

            caracter_cifrado = chr(byte_cifrado)  

            cifrado.append(caracter_cifrado)       

        return ''.join(cifrado)    

cifrador = ARC4("texto")         
mensaje = raw_input("Introduce mensaje para cifrar: ")

mensaje_cifrado = cifrador.cifra(mensaje)

print "El mensaje cifrado es: ", mensaje_cifrado

descifrador = ARC4("texto")  
mensaje_descifrado = descifrador.cifra(mensaje_cifrado)

print "El mensaje original es: ", mensaje_descifrado