Saltar al contenido

ejemplo de código de cifrado de transposición de filas

Ejemplo 1: cifrado en columnas simple de Python

def columnar_encrypt(text, key):
    m = { i : [] for i in key }
    cols = [list(text[j:j+len(key)]) for j in range(0, len(text), len(key))]
    if len(cols[-1]) < len(key):
        while len(cols[-1]) != len(key):
            cols[-1].append(' ')
    i = 0
    for k in m.keys():
        if i < len(key):
            for j in cols:
                m[k] += j[i]
            i += 1
    s = {k : m[k] for k in sorted(m)}
    cipher = ''
    for i in s.keys():
        for x in s[i]:
            cipher += x
    print(m)
    return cipher

def columnar_decrypt(cipher, key):
    if len(cipher) < len(key):
        key = key[:len(cipher)]
    n = len(cipher) // len(key)
    s = { k : [] for k in sorted(key) }
    cols = [cipher[j:j+n] for j in range(0, len(cipher), n)]    
    i = 0
    for k in s.keys():
        if i < len(key):
            s[k] = list(cols[i])
            i += 1
    m = {}  
    for k in key:
        m[k] = s[k]
    o = m
    plain = ''
    import pandas as pd
    m = pd.DataFrame(m)
    for i in m.itertuples():
        for j in i[1:]:
            plain += j
    print(s, 'n')
    return plain.strip()

Ejemplo 2: cifrado en columnas de Python

def columnar_encrypt():
    plain = input("Enter the plain text: ").replace(' ', '')
    key = list(input("Enter the plain text: ").lower())
    rowSize = len((key))
    m = [(list(plain[i: i + rowSize])) for i in range(0, len(plain), rowSize)]
    for i in m:
        if len(i) != rowSize:
            while len(i) != rowSize:
                i.append('')
        print(i)
    key_sort = []
    for i in sorted(key):
        key_sort.append(key.index(i))
        key[key.index(i)] = ''
    print(key_sort)
    cipher = []
    for i in key_sort:
        for j in range(len(m)):
            if m[j][i] is not '':   
                cipher.append(m[j][i])
    return 'Cipher Text: Read if you can: {0}'.format(''.join(cipher))
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *