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:
- Otetaan n:s selvätekstimerkki ( m n , missä 0≤n <selkeiden merkkien määrä);
- Etsi sarake ( j ), jossa ensimmäisen rivin merkki on m n ( s 1 j = m n );
- 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);
- Lisää salatekstiin ( C ) i : nnen rivin 1. sarakkeen merkki ( jossa n = s i 1 ).
Salauksen purku
Salatekstin ( C ) salauksen purkamiseksi avaimella ( K ) tarvitset:
- Otetaan salatekstin n :s merkki ( c n , missä 0≤n<merkkien määrä C );
- Etsi rivi ( i ), jossa 1. sarakkeen merkki on yhtä suuri kuin c n ( s i 1 = c n );
- 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);
- 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
- m1 = "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")
Salateksti ( C ) - "DANZQCWNNH"
Salauksen purku
- 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 = "HELLOWWORLD")
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