Beaufortin salaus

Beaufortin salaus on Sir Francis Beaufortin luoma moniaakkosinen korvaussalaus . Salaus on samanlainen kuin Vigenèren salaus , jossa on hieman muokattu salausmekanismi ja tabula recta (tunnetaan myös nimellä Vigenère-taulukko). Sitä käytettiin M-209 pyörivässä salauskoneessa .

Kuvaus

Avain

Avaimen ( K ) pituuden on oltava yhtä suuri kuin alkuperäisen tekstin pituus. Tätä varten avainsana tallennetaan syklisesti, kunnes sen pituus vastaa lähdetekstin pituutta.

Salaus

Selkeän tekstin ( M ) salaamiseksi avaimella ( K ) tarvitset:

  1. Otetaan n:s selvätekstimerkki ( m n , missä 0≤n <selkeiden merkkien määrä);
  2. Etsi sarake ( j ), jossa ensimmäisen rivin merkki on m n ( s 1 j = m n );
  3. Etsi merkkijono ( i ), jossa j : nnen sarakkeen merkki on yhtä suuri kuin k n ( s i j = k n , missä k n on n . avainmerkki);
  4. Lisää salatekstiin ( C ) i : nnen rivin 1. sarakkeen merkki ( jossa n = s i 1 ).

Salauksen purku

Salatekstin ( C ) salauksen purkamiseksi avaimella ( K ) tarvitset:

  1. Otetaan salatekstin n :s merkki ( c n , missä 0≤n<merkkien määrä C );
  2. Etsi rivi ( i ), jossa 1. sarakkeen merkki on yhtä suuri kuin c n ( s i 1 = c n );
  3. Etsi sarake ( j ), jossa i : nnen rivin merkki on yhtä suuri kuin k n ( s i j = k n , missä k n on n . avainmerkki);
  4. Lisää purettuun tekstiin ( M ) j : nnen sarakkeen 1. rivin symboli ( m n = s 1 j ).

Esimerkki

Anna lähdeteksti: C = "HELLOWORLD"
ja avain: K = "KEY"

Avain

Tyhjennyksen pituus on 10 merkkiä, joten myös avaimen pituuden tulee olla 10 merkkiä.
K ="KEYKEYK"

Salaus

. . . . . . . . .

Salateksti ( C ) - "DANZQCWNNH"

Salauksen purku

. . . . . . . . .

Purettu teksti ( M ) - "HELLOWORLD"

Toteutus

Python

Koodi m = "HELLOWWORLD" k = "AVAIN" k = ( k * ( len ( m )) + k )[: len ( m )] # säätönäppäin c = '' . liitä ([ chr ((( ord ( k [ i ]) - ord ( m [ i ])) % 26 ) + ord ( "A" )) for i in xrange ( len ( m ))]) # salaa tulostus c # palauttaa DANZQCWNNH e = '' . liitä ([ chr ((( ord ( k [ i ]) - ord ( c [ i ])) % 26 ) + ord ( "A" )) for i in xrange ( len ( c ))]) # purkaa print e # palauttaa HELLOWORLDin

JavaScript

Koodi var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; //asettaa aakkosten merkkijonon var m = "HELLOWORLD" ; var k = "AVAIN" ; for ( i = k . pituus , j = 0 ; i < m . pituus ; i ++ , j ++ ){ k + = k [ ( ( i + j ) % k . pituus ) ]; } // # mukauta avainta funktio salaa ( m , k ){ c = '' ; for ( i = 0 ; i < m . pituus ; i ++ ){ // salaa c += a [ ( ( ( a . pituus + a . indexOf ( k [ i ] ) - a . indexOf ( m [ i ] ) ) ) % a.pituus ) ) ] ; _ //merkki merkiltä } return c ; } //Voit kopioida ja liittää tämän koodin selainkonsoliisi. konsoli . loki ( 'cypher =' , salaa ( m , k )); //# antaa DANZQCWNNH- konsolin . loki ( 'purettu =' , salaa ( salaa ( m , k ), k )); //# palauttaa HELLOWORLD