Cifrado de Beaufort

El cifrado de Beaufort es un cifrado de sustitución polialfabético creado por Sir Francis Beaufort . El cifrado es similar al cifrado de Vigenère , con un mecanismo de cifrado ligeramente modificado y el uso de la tabula recta (también conocida como la tabla de Vigenère). Fue utilizado en la máquina de cifrado rotatorio M-209 .

Descripción

Clave

La longitud de la clave ( K ) debe ser igual a la longitud del texto original. Para ello, la palabra clave se registra cíclicamente hasta que su longitud coincida con la longitud del texto de origen.

Cifrado

Para encriptar el texto sin formato ( M ) usando la clave ( K ) necesita:

  1. Tome el enésimo carácter de texto sin formato ( m n , donde 0≤n<número de caracteres claros);
  2. Encuentre la columna ( j ) donde el carácter en la primera fila es m n ( s 1 j = m n );
  3. Encuentre la cadena ( i ) donde el carácter en la j -ésima columna es igual a k n ( s i j = k n , donde k n es el n -ésimo carácter clave);
  4. Agregue al texto cifrado ( C ) el carácter de la primera columna de la i -ésima fila ( con n = s i 1 ).

Descifrado

Para descifrar el texto cifrado ( C ) usando la clave ( K ) necesita:

  1. Tome el n -ésimo carácter del texto cifrado ( c n , donde 0≤n<número de caracteres C );
  2. Encuentre la línea ( i ) donde el carácter en la primera columna es igual a c n ( s i 1 = c n );
  3. Encuentre la columna ( j ) donde el carácter en la i -ésima fila es igual a k n ( s i j = k n , donde k n es el n -ésimo carácter clave);
  4. Agregue al texto descifrado ( M ) el símbolo de la primera línea de la j -ésima columna ( m n = s 1 j ).

Ejemplo

Que se dé el texto fuente: C = "HELLOWORLD"
y la clave: K = "KEY"

Clave

La longitud del claro es de 10 caracteres, por lo que la longitud de la clave también debe ser de 10 caracteres.
K ="KEYKEYK"

Cifrado

. . . . . . . . .

Texto cifrado ( C ) - "DANZQCWNNH"

Descifrado

. . . . . . . . .

Texto descifrado ( M ) - "HELLOWORLD"

Implementación

Pitón

El código m = "HELOWORLD" k = "LLAVE" k = ( k * ( len ( m )) + k )[: len ( m )] # tecla de ajuste c = '' . unir ([ chr ((( ord ( k [ i ]) - ord ( m [ i ])) % 26 ) + ord ( "A" )) for i in xrange ( len ( m ))]) # cifrar imprimir c # devolverá DANZQCWNNH e = '' . unir ([ chr ((( ord ( k [ i ]) - ord ( c [ i ])) % 26 ) + ord ( "A" )) for i in xrange ( len ( c ))]) # decodificar imprimir e # devolverá HELLOWORLD

JavaScript

El código var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; // establece la cadena alfabética var m = "HELLOWORLD" ; vark = " CLAVE " ; for ( i = k . longitud , j = 0 ; i < m . longitud ; i ++ , j ++ ){ k += k [ ( ( i + j ) % k . longitud ) ]; } // # personalizar la clave función cifrar ( m , k ){ c = '' ; for ( i = 0 ; i < m . longitud ; i ++ ){ // cifrar c += a [ ( ( ( a . longitud + a . indexOf ( k [ i ] ) - a . indexOf ( m [ i ] ) ) % a.longitud ) ) ] ; _ //carácter por carácter } return c ; } //Puedes copiar y pegar este código en la consola de tu navegador. consola _ log ( 'cifrar =' , cifrar ( m , k )); //# dará la consola DANZQCWNNH . log ( 'descifrado =' , encriptar ( encriptar ( m , k ), k )); //# devolverá HELLOWORLD