class Criptografia:
    
    def __init__(self):
        self.caracteres
        pass
    
    def __mapa_de_caracteres():
        caracteres_padrao = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'
        caracteres_substituicao = {
                '0' : 'NOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM' , 
                '1' : '23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01' , 
                '2' : 'DEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABC' , 
                '3' : 'lmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijk' , 
                '4' : 'MNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL' , 
                '5' : 'TUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS' , 
                '6' : '6789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345' , 
                '7' : '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' , 
                '8' : 'uvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrst' , 
                '9' : 'bcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789a' , 
            }
            
        return caracteres_padrao, caracteres_substituicao
            
    @staticmethod
    def descriptografar(valor):
        return Criptografia.__processo(valor, tipo='descriptografar')
        
    
    @staticmethod
    def criptografar(valor):
        return Criptografia.__processo(valor)
        
    @classmethod
    def __processo(cls, valor, tipo='criptografar'):
        
        resultado = ""
        caracteres_padrao, __ = Criptografia.__mapa_de_caracteres()
        caracter_resultado = ""
        
        for i,letra in enumerate(valor):
            vetor_de_carateres = Criptografia.__recuperar_vetor(i)
            fonte, origem  = caracteres_padrao, vetor_de_carateres
            if tipo == 'descriptografar':
                fonte, origem  = vetor_de_carateres, caracteres_padrao
                
            
            caracter_resultado   = origem[ Criptografia.__recuperar_posicao(valor[i], fonte) ]
            
            if caracter_resultado != -1 :
                resultado += caracter_resultado
            else:
                resultado += valor[i]
        
        return resultado
    
    
    @classmethod
    def __recuperar_vetor(cls, posicao):
        __, caracteres_substituicao = Criptografia.__mapa_de_caracteres()
        
        posicao = str(posicao)
        for i in range(10):
            if len(posicao) > 1 :
                posicao -= 10
                
        return caracteres_substituicao.get(posicao)
        
    @classmethod
    def __recuperar_posicao(cls, letra, vetor):
        
        for i, caractere in enumerate(vetor) :
            if letra == caractere: return i
        
        return -1
        
    
if __name__ == "__main__":
    print(Criptografia.criptografar("123456") , Criptografia.criptografar("1234"), Criptografia.descriptografar("eu6P"))
    