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:
- Tome el enésimo carácter de texto sin formato ( m n , donde 0≤n<número de caracteres claros);
- Encuentre la columna ( j ) donde el carácter en la primera fila es m n ( s 1 j = m n );
- 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);
- 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:
- Tome el n -ésimo carácter del texto cifrado ( c n , donde 0≤n<número de caracteres C );
- Encuentre la línea ( i ) donde el carácter en la primera columna es igual a c n ( s i 1 = c n );
- 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);
- 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
- m1 = "H" .
- j = 8
- yo = 4
- c 1 = s 4 1 = "D"
C += "D" (C = "D")
- m2 = "E"
- j = 5
- yo = 1
- c 2 = s 1 1 = "A"
C += "A" (C = "DA")
. . . . . . . . .
- m10 = "D"
- j = 4
- yo = 8
- c 10 = s 8 1 = "H"
C += "H" (C = "DANZQCWNNH")
Texto cifrado ( C ) - "DANZQCWNNH"
Descifrado
- c 1 = "D".
- yo = 4
- j = 8
- m 1 = s 1 8 = "H"
M += "D" (M = "H")
- c2 = "A"
- yo = 1
- j = 5
- m 2 = s 1 5 = "E"
M += "E" (M = "ÉL")
. . . . . . . . .
- c10 = "H"
- yo = 8
- j=4
- c 10 = s 1 4 = "D"
M += "H" (M = "HOLAMUNDO")
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