V tomto návode preskúmame jednu z metód šifrovania nazývanú Caesar Cipher. Je súčasťou kryptografie.
Úvod
V tejto technike je každý znak nahradený písmenom na určitej pevnej pozícii čísla, ktoré je neskôr alebo pred abecedou. Napríklad - Abeceda B je nahradená o dve pozície nižšie D. D by sa zmenilo na F a tak ďalej. Táto metóda je pomenovaná po populárnych trecích postavách Juliusa Caesara, ktorý ju používal na komunikáciu s úradníkmi.
Na jeho implementáciu sa používa algoritmus. Pochopme nasledovné.
Funkcia algoritmu Caesarovej šifry
Tento algoritmus pozostáva z niekoľkých funkcií, ktoré sú uvedené nižšie.
- Táto technika je pomerne jednoduchá na použitie šifrovania.
- Každý text je nahradený pevným číslom pozície nadol alebo nahor s abecedou.
- Ide o jednoduchý typ náhradnej šifry.
Na definovanie každého druhého textu, ktorý bol presunutý nadol, je potrebná celočíselná hodnota. Táto celočíselná hodnota je známa aj ako posun.
čo je objekt java
Tento koncept môžeme reprezentovať pomocou modulárnej aritmetiky tak, že najprv písmeno premeníme na čísla podľa schémy, A = 0, B = 1, C = 2, D = 3…….. Z = 25.
Na posun n písmena možno použiť nasledujúci matematický vzorec.
negácia diskrétna matematika
Ako dešifrovať?
Dešifrovanie je rovnaké ako šifrovanie. Môžeme vytvoriť funkciu, ktorá vykoná posun v opačnom smere na dešifrovanie pôvodného textu. Môžeme však použiť cyklickú vlastnosť šifry pod modulom.
Šifra(n) = Dešifrovať(26-n)
Rovnakú funkciu možno použiť na dešifrovanie. Namiesto toho upravíme hodnotu posunu tak, že posunie = 26 - zmena.
Poďme pochopiť nasledujúci príklad -
Príklad -
def encypt_func(txt, s): result = '' # transverse the plain txt for i in range(len(txt)): char = txt[i] # encypt_func uppercase characters in plain txt if (char.isupper()): result += chr((ord(char) + s - 64) % 26 + 65) # encypt_func lowercase characters in plain txt else: result += chr((ord(char) + s - 96) % 26 + 97) return result # check the above function txt = 'CEASER CIPHER EXAMPLE' s = 4 print('Plain txt : ' + txt) print('Shift pattern : ' + str(s)) print('Cipher: ' + encypt_func(txt, s))
Výkon:
Plain txt : CEASER CIPHER EXAMPLE Shift pattern : 4 Cipher: HJFXJWsHNUMJWsJCFRUQJ
Vyššie uvedený kód prechádzal znakom naraz. Prenášal každý znak podľa pravidla v závislosti od postupu šifrovania a dešifrovania textu.
zadanie reťazca v jazyku Java
Definovali sme niekoľko špecifických pozícií, ktoré generovali šifrovaný text.
Porušenie algoritmu Caesarovej šifry
Šifrovaný text môžeme hacknúť rôznymi spôsobmi. Jedným zo spôsobov je Technika hrubej sily, čo zahŕňa vyskúšanie každého možného dešifrovacieho kľúča. Táto technika nie je taká náročná a nevyžaduje veľa úsilia.
Poďme pochopiť nasledujúci príklad.
Príklad -
msg = 'rGMTLIVrHIQSGIEWIVGIEWIV' #encrypted msg LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' for k in range(len(LETTERS)): transformation = '' for s in msg: if s in LETTERS: n = LETTERS.find(s) n = n - k if n <0: n="n" + len(letters) transformation="transformation" letters[n] else: s print('hacking k #%s: %s' % (k, transformation)) < pre> <p> <strong>Output:</strong> </p> <pre> Hacking k #25: rHNUMJWrIJRTHJFXJWHJFXJW </pre> <h2>Transposition Cipher</h2> <p>Transposition cipher algorithm is a technique where the alphabet order in the plaintext is rearranged to form a cipher text. This algorithm doesn't support the actual plain text alphabets.</p> <p>Let's understand this algorithm using an example.</p> <p> <strong>Example -</strong> </p> <p>We will take the simple example called columnar transposition cipher where we write the each character in the pain text in horizontal with specified alphabet width. The vertically written texts are cipher, which create a completely unlike cipher text.</p> <p>Let's take a plain text, and apply the simple columnar transposition technique as shown below.</p> <img src="//techcodeview.com/img/python-tutorial/89/caesar-cipher-python-2.webp" alt="Caesar Cipher in Python"> <p>We placed the plain text horizontally and the cipher text is created with vertical format as: <strong>hotnejpt.lao.lvi.</strong> To decrypt this, the receiver must use the same table to decrypt the cipher text to plain text.</p> <p> <strong>Code -</strong> </p> <p>Let's understand the following example.</p> <pre> def split_len(sequence, length): return [sequence[i:i + length] for i in range(0, len(sequence), length)] def encode(k, plaintxt): order = { int(val): n for n, val in enumerate(k) } ciphertext = '' for index in sorted(order.ks()): for part in split_len(plaintxt, len(k)): try:ciphertext += part[order[index]] except IndexError: continue return ciphertext print(encode('3214', 'HELLO')) </pre> <p> <strong>Explanation -</strong> </p> <p>In the above code, we have created a function named <strong>split_len(),</strong> which spitted the pain text character, placed in columnar or row format.</p> <p>The <strong>encode()</strong> method created the cipher text with a key specifying the number of columns, and we have printed each cipher text by reading through each column.</p> <h4>Note - The transposition technique is meant to be a significant improvement in crypto security. Cryptanalyst observed that re-encrypting the cipher text using same transposition cipher shows better security.</h4> <hr></0:>
Transpozičná šifra
Algoritmus transpozičnej šifry je technika, pri ktorej sa abecedné poradie v otvorenom texte preusporiada tak, aby sa vytvoril šifrový text. Tento algoritmus nepodporuje skutočné abecedy čistého textu.
nastavený js
Poďme pochopiť tento algoritmus pomocou príkladu.
Príklad -
ako upgradujem javu
Vezmime si jednoduchý príklad s názvom stĺpcová transpozičná šifra, kde napíšeme každý znak v texte bolesti vodorovne so špecifikovanou šírkou abecedy. Vertikálne písané texty sú šifrové, ktoré vytvárajú úplne odlišný šifrový text.
Vezmime si obyčajný text a použijeme jednoduchú techniku stĺpcovej transpozície, ako je uvedené nižšie.
Čistý text sme umiestnili horizontálne a šifrovaný text je vytvorený vo vertikálnom formáte ako: hotnejpt.lao.lvi. Na dešifrovanie musí prijímač použiť rovnakú tabuľku na dešifrovanie šifrovaného textu na obyčajný text.
kód -
Poďme pochopiť nasledujúci príklad.
def split_len(sequence, length): return [sequence[i:i + length] for i in range(0, len(sequence), length)] def encode(k, plaintxt): order = { int(val): n for n, val in enumerate(k) } ciphertext = '' for index in sorted(order.ks()): for part in split_len(plaintxt, len(k)): try:ciphertext += part[order[index]] except IndexError: continue return ciphertext print(encode('3214', 'HELLO'))
vysvetlenie -
Vo vyššie uvedenom kóde sme vytvorili funkciu s názvom split_len(), ktorý vypľul textový znak bolesti, umiestnený v stĺpcovom alebo riadkovom formáte.
The kódovať () metóda vytvorila šifrovaný text s kľúčom určujúcim počet stĺpcov a každý šifrovaný text sme vytlačili prečítaním každého stĺpca.
Poznámka – Technika transpozície má predstavovať výrazné zlepšenie bezpečnosti kryptomien. Kryptanalytik zistil, že opätovné zašifrovanie šifrovaného textu pomocou rovnakej transpozičnej šifry ukazuje lepšiu bezpečnosť.
0:>