Beaufort titkosítás

A Beaufort-rejtjel egy többalfabetikus helyettesítő titkosítás , amelyet Sir Francis Beaufort hozott létre . A titkosítás hasonló a Vigenère -rejtjelhez , kissé módosított titkosítási mechanizmussal és a tabula recta (más néven Vigenère-táblázat) használatával. Az M-209 forgó rejtjelező gépben használták .

Leírás

Kulcs

A kulcs ( K ) hosszának meg kell egyeznie az eredeti szöveg hosszával. Ehhez a kulcsszót ciklikusan rögzíti, amíg hossza meg nem egyezik a forrásszöveg hosszával.

Titkosítás

Az egyszerű szöveg ( M ) titkosításához a ( K ) kulccsal a következőkre van szüksége:

  1. Vegyük az n- edik egyszerű szöveges karaktert ( m n , ahol 0≤n<tiszta karakterek száma);
  2. Keresse meg azt az oszlopot ( j ), ahol az első sor karaktere m n ( s 1 j = m n );
  3. Keresse meg azt a karakterláncot ( i ), ahol a j - edik oszlop karaktere egyenlő k n -nel ( s i j = k n , ahol k n az n - edik kulcskarakter);
  4. Adjuk hozzá a rejtjelezett szöveghez ( C ) az i - edik sor 1. oszlopának karakterét ( n = s i 1 -gyel ).

Dekódolás

A titkosított szöveg ( C ) visszafejtéséhez a ( K ) kulccsal a következőkre van szüksége:

  1. Vegyük a titkosított szöveg n - edik karakterét ( c n , ahol 0≤n<karakterek száma C );
  2. Keresse meg azt a sort ( i ), ahol az 1. oszlop karaktere egyenlő c n -vel ( s i 1 = c n );
  3. Keresse meg azt az oszlopot ( j ), ahol az i - edik sorban szereplő karakter egyenlő k n -nel ( s i j = k n , ahol k n az n - edik kulcskarakter);
  4. Adjuk hozzá a visszafejtett szöveghez ( M ) a j -edik oszlop 1. sorának szimbólumát ( m n = s 1 j ).

Példa

Legyen megadva a forrásszöveg: C = "HELLOWORLD"
és a kulcs: K = "KEY"

Kulcs

A törlés hossza 10 karakter, tehát a kulcs hossza is 10 karakter legyen.
K ="KULCS"

Titkosítás

. . . . . . . . .

Rejtjelezett szöveg ( C ) - "DANZQCWNNH"

Dekódolás

. . . . . . . . .

Dekódolt szöveg ( M ) - "HELLOWORLD"

Megvalósítás

Python

A kód m = "HELLOWORLD" k = "KULCS" k = ( k * ( len ( m )) + k )[: len ( m )] # beállító gomb c = '' . join ([ chr ((( ord ( k [ i ]) - ord ( m [ i ])) % 26 ) + ord ( "A" )) for i in xrange ( len ( m ))]) # nyomtatás titkosítása c A # értéke DANZQCWNNH e = '' . join ([ chr ((( ord ( k [ i ]) - ord ( c [ i ])) % 26 ) + ord ( "A" )) for i in xrange ( len ( c ))]) # dekódolás print e # a HELLOWORLD-t adja vissza

JavaScript

A kód var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; //az ábécé karakterláncának beállítása var m = "HELLOWORLD" ; var k = "KULCS" ; for ( i = k . hosszúság , j = 0 ; i < m . hossz ; i ++ , j ++ ){ k += k [ ( ( i + j ) % k . hossz ) ]; } // # a kulcs testreszabása függvény titkosítás ( m , k ){ c = '' ; for ( i = 0 ; i < m . long ; i ++ ){ // titkosítja a c += a [ ( ( ( a . hossz + a . indexOf ( k [ i ] ) - a . indexOf ( m [ i ] ) ) ) % a.hossz ) ) ] ; _ //karakterenként } return c ; } //Ezt a kódot kimásolhatja és beillesztheti a böngésző konzoljába. konzol . log ( ' cypher = ' , titkosítás ( m , k )); //# a DANZQCWNNH konzolt fogja adni . log ( 'decrypted = ' , encrypt ( titkosítás ( m , k ), k )); A //# a HELLOWORLD értéket adja vissza