Beaufort chiffer
Beaufort-chifferet är ett polyalfabetiskt substitutionschiffer skapat av Sir Francis Beaufort . Chifferet liknar Vigenère-chifferet , med en något modifierad krypteringsmekanism och användningen av tabula recta (även känd som Vigenère-tabellen). Den användes i den roterande chiffermaskinen M-209 .
Beskrivning
Nyckel
Längden på nyckeln ( K ) måste vara lika med längden på originaltexten. För att göra detta registreras nyckelordet cykliskt tills dess längd matchar längden på källtexten.
Kryptering
För att kryptera klartexten ( M ) med nyckeln ( K ) behöver du:
- Ta det n :te klartexttecknet ( m n , där 0≤n<antal tydliga tecken);
- Hitta kolumnen ( j ) där tecknet i första raden är m n ( s 1 j = m n );
- Hitta strängen ( i ) där tecknet i den j -te kolumnen är lika med k n ( s i j = k n , där k n är det n -te nyckeltecknet);
- Lägg till chiffertexten ( C ) tecknet för den första kolumnen i den i -te raden ( med n = s i 1 ).
Dekryptering
För att dekryptera chiffertexten ( C ) med nyckeln ( K ) behöver du:
- Ta det n -te tecknet i chiffertexten ( c n , där 0≤n<antal tecken C );
- Hitta raden ( i ) där tecknet i den första kolumnen är lika med c n ( s i 1 = c n );
- Hitta kolumnen ( j ) där tecknet i den i -te raden är lika med k n ( s i j = k n , där k n är det n -te nyckeltecknet);
- Lägg till den dekrypterade texten ( M ) symbolen för den första raden i den j -te kolumnen ( m n = s 1 j ).
Exempel
Låt källtexten anges: C = "HELLOWORLD"
och nyckeln: K = "KEY"
Nyckel
Längden på den klara är 10 tecken, så längden på nyckeln bör också vara 10 tecken.
Kryptering
- 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")
Chiffertext ( C ) - "DANZQCWNNH"
Dekryptering
- c1 = "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")
Dekrypterad text ( M ) - "HELLOWORLD"
Implementering
Python
Koden
m = "HELLOWORLD"
k = "NYCKEL"
k = ( k * ( len ( m )) + k )[: len ( m )] # justera tangent
c = '' . join ([ chr ((( ord ( k [ i ]) - ord ( m [ i ])) % 26 ) + ord ( "A" )) för i i xrange ( len ( m ))]) # kryptera
skriv ut c # kommer att returnera DANZQCWNNH
e = '' . join ([ chr ((( ord ( k [ i ]) - ord ( c [ i ])) % 26 ) + ord ( "A" )) för i i xrange ( len ( c ))]) # avkoda
utskrift e # kommer att returnera HELLOWORLD
JavaScript
Koden
var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; //set alfabetsträngen
var m = "HELLOWORLD" ;
var k = "KEY" ;
för ( i = k . längd , j = 0 ; i < m . längd ; i ++ , j ++ ) { k += k [ ( ( i + j ) % k.längd ) ] ; } // # anpassa nyckeln
funktion kryptera ( m , k ){
c = '' ;
for ( i = 0 ; i < m . längd ; i ++ ){ // kryptera
c += a [ ( ( a . längd + a . indexOf ( k [ i ] ) ) - a . indexOf ( m [ i ] ) ) % a.length ) ] ; _ _ //tecken för tecken } returnera c ; } //Du kan kopiera och klistra in den här koden i din webbläsarkonsol. konsol . log ( 'cypher = ' , kryptera ( m , k )); //# kommer att ge DANZQCWNNH konsolen . log ( 'decrypted = ' , kryptera ( kryptera ( m , k ), k )); //# kommer att returnera HELLOWORLD