Beaufort chiffer

Beaufort-cifferet er en polyalfabetisk substitutionsciffer skabt af Sir Francis Beaufort . Chifferen ligner Vigenère-cifferet , med en let modificeret krypteringsmekanisme og brugen af ​​tabula recta (også kendt som Vigenère-tabellen). Det blev brugt i M-209 roterende chiffermaskine .

Beskrivelse

Nøgle

Nøglens længde ( K ) skal være lig med længden af ​​originalteksten. For at gøre dette registreres nøgleordet cyklisk, indtil dets længde svarer til længden af ​​kildeteksten.

Kryptering

For at kryptere klarteksten ( M ) ved hjælp af nøglen ( K ) skal du bruge:

  1. Tag det n'te almindelige teksttegn ( m n , hvor 0≤n<antal klare tegn);
  2. Find kolonnen ( j ) hvor tegnet i første række er m n ( s 1 j = m n );
  3. Find strengen ( i ), hvor tegnet i den j -te kolonne er lig med k n ( s i j = k n , hvor k n er det n -te nøgletegn);
  4. Tilføj til chifferteksten ( C ) tegnet af den 1. kolonne i den i - te række ( med n = s i 1 ).

Dekryptering

For at dekryptere chifferteksten ( C ) ved hjælp af nøglen ( K ) skal du bruge:

  1. Tag det n -te tegn i chifferteksten ( c n , hvor 0≤n<antal tegn C );
  2. Find linjen ( i ) hvor tegnet i 1. kolonne er lig med c n ( s i 1 = c n );
  3. Find kolonnen ( j ), hvor tegnet i den i - te række er lig med k n ( s i j = k n , hvor k n er det n -te nøgletegn);
  4. Tilføj til den dekrypterede tekst ( M ) symbolet for den 1. linje i den j -te kolonne ( m n = s 1 j ).

Eksempel

Lad kildeteksten angives: C = "HELLOWORLD"
og nøglen: K = "KEY"

Nøgle

Længden af ​​clearen er 10 tegn, så nøglens længde bør også være 10 tegn.
K ="KEYKEYK"

Kryptering

. . . . . . . . .

Ciphertext ( C ) - "DANZQCWNNH"

Dekryptering

. . . . . . . . .

Dekrypteret tekst ( M ) - "HELLOWORLD"

Implementering

Python

Koden m = "HELLOWORLD" k = "NØGLE" k = ( k * ( len ( m )) + k ) [: len ( m )] # justeringstast c = '' . join ([ chr ((( ord ( k [ i ]) - ord ( m [ i ])) % 26 ) + ord ( "A" )) for i i xrange ( len ( m ))]) # krypter print c # vil returnere DANZQCWNNH e = '' . join ([ chr ((( ord ( k [ i ]) - ord ( c [ i ])) % 26 ) + ord ( "A" )) for i i xrange ( len ( c ))]) # decode print e # vil returnere HELLOWORLD

JavaScript

Koden var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; //sæt alfabetstrengen var m = "HELLOWORLD" ; var k = "KEY" ; for ( i = k . længde , j = 0 ; i < m . længde ; i ++ , j ++ ){ k += k [ ( ( i + j ) % k . længde ) ]; } // # tilpas nøglen funktion krypter ( m , k ){ c = '' ; for ( i = 0 ; i < m . længde ; i ++ ){ // krypter c += a [ ( ( a . længde + a . indexOf ( k [ i ] ) ) - a . indexOf ( m [ i ] ) ) % a . længde ) ] ; _ //tegn for tegn } return c ; } //Du kan kopiere og indsætte denne kode i din browserkonsol. konsol . log ( 'cypher = ' , krypter ( m , k )); //# vil give DANZQCWNNH konsol . log ( 'dekrypteret = ' , krypter ( krypter ( m , k ), k )); //# vil returnere HELLOWORLD