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:
- Vegyük az n- edik egyszerű szöveges karaktert ( m n , ahol 0≤n<tiszta karakterek száma);
- Keresse meg azt az oszlopot ( j ), ahol az első sor karaktere m n ( s 1 j = m n );
- 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);
- 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:
- Vegyük a titkosított szöveg n - edik karakterét ( c n , ahol 0≤n<karakterek száma C );
- Keresse meg azt a sort ( i ), ahol az 1. oszlop karaktere egyenlő c n -vel ( s i 1 = c n );
- 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);
- 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
- m 1 = "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")
Rejtjelezett szöveg ( C ) - "DANZQCWNNH"
Dekódolás
- 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")
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