Cifrar con cifrado XOR con clave de repetición

Las arquitecturas informáticas tienen valores ASCII predefinidos y formas binarias para todos los caracteres imprimibles, lo que nos permite operar con lógica bit a bit como XOR y depende de la mayoría de los algoritmos de cifrado/descifrado. La clave funciona con XOR en el texto sin formato para producir el texto cifrado. 

Solo los parámetros necesarios para cifrar un texto sin formato utilizando esta técnica:

  1. Texto sin formato (texto que tiene que ser encriptado).
  2. Clave (byte único de texto que se utiliza para cifrar, puede tener cualquier longitud).

Procesamiento de cifrado:

  • Encontrar las longitudes de «Texto sin formato» y «Clave».
  • Dividir el texto sin formato en partes de longitud equivalente a la longitud de Key.
  • XOR-ring las piezas de texto sin formato con la clave en el orden respectivo individualmente.
  • Almacene el resultado anterior operado por XOR en una array.
  • Cuando finaliza el bucle, la array contiene todo el texto cifrado.

Nota: A veces, es posible que deba rellenar el texto sin formato en caso de que no esté bien alineado con el tamaño general del bloque. Aquí está cómo hacerlo https://www.geeksforgeeks.org/retaining-the-padded-bytes-of-structural-padding-in-python/

A continuación se muestra el código para cifrar XOR de clave repetida ;

Python3

def repeated_key_xor(plain_text, key):
    
    # returns plain text by repeatedly xoring it with key
    pt = plain_text
    len_key = len(key)
    encoded = []
      
    for i in range(0, len(pt)):
        encoded.append(pt[i] ^ key[i % len_key])
    return bytes(encoded)
  
# Driver Code
def main():
    plain_text = b'Burning \'em, if you ain\'t quick and nimble\nI go crazy when I hear a cymbal'
    key = b'ICE'
      
    print("Plain text: ", plain_text)
    print("Encrypted as: ", repeated_key_xor(plain_text, key).hex())
  
if __name__ == '__main__':
    main()

Producción:

Texto sin formato: b»Quemarlos, si no eres rápido y ágil\nMe vuelvo loco cuando escucho un címbalo»

Encrypted as: 0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f20430a652e2c652a3124333a653e2b2027630c692b20283165286326302e27282f

Publicación traducida automáticamente

Artículo escrito por poornapragnamath y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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