În acest tutorial, vom explora una dintre metodele de criptare numite Caesar Cipher. Este o parte a Criptografiei.
Introducere
În această tehnică, fiecare caracter este înlocuit cu o literă, o anumită poziție a numărului fix, care este mai târziu sau înaintea alfabetului. De exemplu - Alfabetul B este înlocuit cu două poziții în jos D. D ar deveni F și așa mai departe. Această metodă este numită după personajele populare de frecare Iulius Cezar, care a folosit-o pentru a comunica cu oficialii.
Există un algoritm folosit pentru a-l implementa. Să înțelegem următoarele.
Caracteristica algoritmului de cifrare Caesar
Acest algoritm constă din câteva caracteristici care sunt prezentate mai jos.
- Această tehnică este destul de simplă de aplicat criptarea.
- Fiecare text este înlocuit cu numărul fix de poziție în jos sau în sus cu alfabetul.
- Este un tip simplu de cifru substitut.
Există o valoare întreagă necesară pentru a defini fiecare din urmă text care a fost mutat în jos. Această valoare întreagă este cunoscută și sub denumirea de deplasare.
expresii java lambda
Putem reprezenta acest concept folosind aritmetica modulară prin transmutarea mai întâi a literei în numere, conform schemei, A = 0, B = 1, C = 2, D = 3…….. Z = 25.
Următoarea formulă matematică poate fi utilizată pentru a muta n literă.
noroc
Cum se decriptează?
Decriptarea este aceeași cu criptarea. Putem crea o funcție care va realiza schimbarea în calea opusă pentru a decripta textul original. Cu toate acestea, putem folosi proprietatea ciclică a cifrului sub modul.
Cifrare(n) = Decifrare(26-n)
Aceeași funcție poate fi folosită pentru decriptare. În schimb, vom modifica valoarea deplasării astfel încât shifts = 26 - schimb.
Să înțelegem următorul exemplu -
Exemplu -
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))
Ieșire:
Plain txt : CEASER CIPHER EXAMPLE Shift pattern : 4 Cipher: HJFXJWsHNUMJWsJCFRUQJ
Codul de mai sus a traversat caracterul la un moment dat. A transferat fiecare caracter conform regulii în funcție de procedura de criptare și decriptare a textului.
tat forma completa
Am definit câteva seturi specifice de poziții care au generat un text cifrat.
Încălcarea algoritmului de cifrare Caesar
Putem pirata textul cifrat în diferite moduri. Una dintre căi este Tehnica forței brute, care implică încercarea tuturor cheilor de decriptare posibile. Această tehnică nu este atât de grea și nu necesită mult efort.
Să înțelegem următorul exemplu.
Exemplu -
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:>
Cifrul de transpunere
Algoritmul de cifrare de transpunere este o tehnică în care ordinea alfabetului în textul simplu este rearanjată pentru a forma un text cifrat. Acest algoritm nu acceptă alfabetele de text simplu.
rând vs coloană
Să înțelegem acest algoritm folosind un exemplu.
Exemplu -
c++ convertește int în șir
Vom lua exemplul simplu numit cifr de transpunere în coloană în care scriem fiecare caracter din textul durer în orizontală cu lățimea alfabetului specificată. Textele scrise pe verticală sunt cifrate, care creează un text cifrat complet diferit.
Să luăm un text simplu și să aplicăm tehnica simplă de transpunere în coloană, așa cum se arată mai jos.
Am plasat textul simplu pe orizontală, iar textul cifrat este creat cu format vertical ca: hotnejpt.lao.lvi. Pentru a decripta acest lucru, receptorul trebuie să folosească același tabel pentru a decripta textul cifrat în text simplu.
Cod -
Să înțelegem următorul exemplu.
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'))
Explicatie -
În codul de mai sus, am creat o funcție numită split_len(), care scuipa caracterul text de durere, plasat în format coloane sau rând.
The codifica() metoda a creat textul cifrat cu o cheie care specifică numărul de coloane și am tipărit fiecare text cifrat citind fiecare coloană.
Notă - Tehnica de transpunere este menită să fie o îmbunătățire semnificativă a securității cripto. Cryptanalyst a observat că re-criptarea textului cifrat folosind același cifr de transpunere arată o mai bună securitate.
0:>