Beaufortova šifra
Beaufortova šifra je polyalfabetická substituční šifra vytvořená sirem Francisem Beaufortem . Šifra je podobná Vigenèrově šifře , s mírně upraveným šifrovacím mechanismem a použitím tabula recta (také známé jako Vigenèrova tabulka). Byl použit v rotačním šifrovacím stroji M-209 .
Popis
Klíč
Délka klíče ( K ) se musí rovnat délce původního textu. K tomu je klíčové slovo cyklicky zaznamenáváno, dokud jeho délka neodpovídá délce zdrojového textu.
Šifrování
K zašifrování prostého textu ( M ) pomocí klíče ( K ) potřebujete:
- Vezměte n-tý znak otevřeného textu ( m n , kde 0≤n<počet prázdných znaků);
- Najděte sloupec ( j ), kde znak v prvním řádku je m n ( s 1 j = m n );
- Najděte řetězec ( i ), kde je znak v j -tém sloupci roven k n ( s i j = k n , kde k n je n -tý klíčový znak);
- Přidejte do šifrového textu ( C ) znak 1. sloupce i -tého řádku ( s n = s i 1 ).
Dešifrování
K dešifrování šifrovaného textu ( C ) pomocí klíče ( K ) potřebujete:
- Vezměte n -tý znak šifrového textu ( c n , kde 0≤n<počet znaků C );
- Najděte řádek ( i ), kde se znak v 1. sloupci rovná c n ( s i 1 = c n );
- Najděte sloupec ( j ), kde se znak v i -té řadě rovná k n ( s i j = k n , kde k n je n -tý klíčový znak);
- Do dešifrovaného textu ( M ) přidejte symbol 1. řádku j -tého sloupce ( m n = s 1 j ).
Příklad
Nechť je uveden zdrojový text: C = "HELLOWORLD"
a klíč: K = "KEY"
Klíč
Délka vymazání je 10 znaků, takže délka klíče by měla být také 10 znaků.
K = "KEYK"
Šifrování
- mi = "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")
Šifrovaný text ( C ) - "DANZQCWNNH"
Dešifrování
- 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 = "HELLOWORLD")
Dešifrovaný text ( M ) - "HELLOWORLD"
Implementace
Python
Kód
m = "HELLOWORLD"
k = "KEY"
k = ( k * ( len ( m )) + k )[: len ( m )] # klíč úpravy
c = '' . spojit ([ chr ((( ord ( k [ i ]) - ord ( m [ i ])) % 26 ) + ord ( "A" )) pro i v rozsahu x ( len ( m ))]) # zašifrovat
tisk c # vrátí DANZQCWNNH
e = '' . join ([ chr ((( ord ( k [ i ]) - ord ( c [ i ])) % 26 ) + ord ( "A" )) pro i v xrange ( len ( c ))]) # dekódovat
tisk e # vrátí HELLOWORLD
JavaScript
Kód
var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; //nastaví řetězec abecedy
var m = "HELLOWORLD" ;
var k = "KEY" ;
for ( i = k . délka , j = 0 ; i < m . délka ; i ++ , j ++ ){ k += k [ ( ( i + j ) % k . délka ) ]; } // # přizpůsobení klíče
funkce zašifrovat ( m , k ){
c = '' ;
for ( i = 0 ; i < m . délka ; i ++ ){ // zašifrovat
c += a [ ( ( ( a . délka + a . indexOf ( k [ i ] ) - a . indexOf ( m [ i ] ) ) ) % a.length ) ) ] ; _ //znak po znaku } return c ; } //Tento kód můžete zkopírovat a vložit do konzole prohlížeče. konzole . log ( 'cypher = ' , zašifrovat ( m , k )); //# poskytne konzoli DANZQCWNNH . log ( 'decrypted = ' , encrypt ( encrypt ( m , k ), k )); //# vrátí HELLOWORLD