Cifrul Beaufort
Cifrul Beaufort este un cifr de substituție polialfabetic creat de Sir Francis Beaufort . Cifrul este similar cu cifrul Vigenère , cu un mecanism de criptare ușor modificat și cu utilizarea tabula recta (cunoscută și ca tabelul Vigenère). A fost folosit în mașina de cifrare rotativă M-209 .
Descriere
Cheie
Lungimea tastei ( K ) trebuie să fie egală cu lungimea textului original. Pentru a face acest lucru, cuvântul cheie este înregistrat ciclic până când lungimea lui se potrivește cu lungimea textului sursă.
Criptare
Pentru a cripta textul simplu ( M ) folosind cheia ( K ) aveți nevoie de:
- Luați al -lea caracter text simplu ( m n , unde 0≤n<numărul de caractere clare);
- Găsiți coloana ( j ) unde caracterul din primul rând este m n ( s 1 j = m n );
- Găsiți șirul ( i ) unde caracterul din coloana j -a este egal cu k n ( s i j = k n , unde k n este al n -lea caracter cheie);
- Adaugă la textul cifrat ( C ) caracterul primei coloane a rândului i ( cu n = s i 1 ).
Decriptare
Pentru a decripta textul cifrat ( C ) folosind cheia ( K ) aveți nevoie de:
- Luați al n --lea caracter al textului cifrat ( c n , unde 0≤n<numărul de caractere C );
- Găsiți linia ( i ) unde caracterul din prima coloană este egal cu c n ( s i 1 = c n );
- Găsiți coloana ( j ) în care caracterul din rândul i este egal cu k n ( s i j = k n , unde k n este al n -lea caracter cheie);
- Adăugați textului decriptat ( M ) simbolul liniei 1 a coloanei j - a ( m n = s 1 j ).
Exemplu
Să fie dat textul sursă: C = „HELLOWORLD”
și cheia: K = „CHEIE”
Cheie
Lungimea ștergării este de 10 caractere, deci lungimea cheii ar trebui să fie, de asemenea, de 10 caractere.
K ="KEYKEYK"
Criptare
- m 1 = "H".
- j = 8
- i = 4
- c 1 = s 4 1 = "D"
C += "D" (C = "D")
- m 2 = "E"
- j = 5
- i = 1
- c 2 = s 1 1 = "A"
C += "A" (C = "DA")
. . . . . . . . .
- m10 = „D”
- j = 4
- i = 8
- c 10 = s 8 1 = "H"
C += "H" (C = "DANZQCWNNH")
Text cifrat ( C ) - „DANZQCWNNH”
Decriptare
- c 1 = „D”.
- i = 4
- j = 8
- m 1 = s 1 8 = "H"
M += "D" (M = "H")
- c2 = "A"
- i = 1
- j = 5
- m 2 = s 1 5 = "E"
M += "E" (M = "HE")
. . . . . . . . .
- c10 = „H”
- i = 8
- j=4
- c 10 = s 1 4 = "D"
M += "H" (M = "HELLOWORLD")
Text decriptat ( M ) - „HELLOWORLD”
Implementare
Python
Codul
m = „HELLOWORLD”
k = „CHEIE”
k = ( k * ( len ( m )) + k )[: len ( m )] # tasta de reglare
c = '' . uniți ([ chr ((( ord ( k [ i ]) - ord ( m [ i ])) % 26 ) + ord ( " A " )) pentru i în xrange ( len ( m ))]) # criptați
print c # va returna DANZQCWNNH
e = '' . uniți ([ chr ((( ord ( k [ i ]) - ord ( c [ i ])) % 26 ) + ord ( " A " )) pentru i în xrange ( len ( c ))]) # decode
print e # va returna HELLOWORLD
JavaScript
Codul
var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; //setează șirul alfabetului
var m = "HELLOWORLD" ;
var k = "CHEIE" ;
pentru ( i = k . lungime , j = 0 ; i < m . lungime ; i ++ , j ++ ){ k += k [ ( ( i + j ) % k . lungime ) ]; } // # personalizați cheia
function encrypt ( m , k ){
c = '' ;
pentru ( i = 0 ; i < m . lungime ; i ++ ){ // criptează
c += a [ ( ( ( a . lungime + a . indexOf ( k [ i ] ) - a . indexOf ( m [ i ] ) ) ) % a.lungime ) ] ; _ _ //caracter cu caracter } return c ; } //Puteți copia și lipi acest cod în consola browserului dvs. consola . log ( 'cifrare = ' , criptare ( m , k )); //# va da DANZQCWNNH consola . log ( 'decrypted = ' , criptează ( criptează ( m , k ), k )); //# va returna HELLOWORLD