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:

  1. Luați al -lea caracter text simplu ( m n , unde 0≤n<numărul de caractere clare);
  2. Găsiți coloana ( j ) unde caracterul din primul rând este m n ( s 1 j = m n );
  3. 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);
  4. 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:

  1. Luați al n --lea caracter al textului cifrat ( c n , unde 0≤n<numărul de caractere C );
  2. Găsiți linia ( i ) unde caracterul din prima coloană este egal cu c n ( s i 1 = c n );
  3. 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);
  4. 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

. . . . . . . . .

Text cifrat ( C ) - „DANZQCWNNH”

Decriptare

. . . . . . . . .

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