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:

  1. Vezměte n-tý znak otevřeného textu ( m n , kde 0≤n<počet prázdných znaků);
  2. Najděte sloupec ( j ), kde znak v prvním řádku je m n ( s 1 j = m n );
  3. 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);
  4. 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:

  1. Vezměte n -tý znak šifrového textu ( c n , kde 0≤n<počet znaků C );
  2. Najděte řádek ( i ), kde se znak v 1. sloupci rovná c n ( s i 1 = c n );
  3. 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);
  4. 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í

. . . . . . . . .

Šifrovaný text ( C ) - "DANZQCWNNH"

Dešifrování

. . . . . . . . .

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