Cifru de tip Caesar

Stefanescu Mihai 3 months ago Security

Cifrul de tip Cezar este una dintre primele si cele mai simple metode de cifrare. Este un cifru de substitutie, adica fiecare litera unu text dat este inlocuita cu o litare aflata la un anumit numar de pozitii de ea in alfabet. De exemplu, daca am lua ca exemplu numarul de pozitii 1, litera A va fi inlocuita de litera B, litera B va fi inlocuita de litera C sia asa mai departe. Aceasta tehnica a fost numita dupa Iulius Cezar, pentru ca se spune ca asa vorbea (in scrisori) cu oamenii lui.

Deci, acest tip de cifru are nevoie de un text si un int care sa indice numarul de caractere cu care sa schimbe pozitia fiecarei litere. Acest tip de criptare poate fi reprezentat si printr-o formula matematica transformand literele in numere, conform schemei A = 0, B = 1, ... Z = 25. Criptarea unei litere poate fi descrisa in mod matematic astfel:

En(x) = (x+n)mod26
iar decriptarea
Dn(x) = (x-n)mod26

Exemple:

Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ
Shift: 23
Cifru: XYZABCDEFGHIJKLMNOPQRSTUVW

Text : ATTACKATONCE
Shift: 4
Cifru: EXXEGOEXSRGI

Algortmul pentru criptare

Date de intrare:
1. un string cu litere mici
2. un int in intervalul 0-25 ce reprezinta shift-ul de caractere

Procedura:
1. iteram prin textul data caracter cu caracter
2. pentru fiecare caracter, transformam caracterul conform regulilor, in functie de tipul actiuni, criptare sau decriptare
3. intoarcem noul string generat
Un exemplu de asemenea program:

<?php

// Un program PHP ce ilustreaza tehnica
// Caesar Cipher de criptare
 
// Functia primeste un string si un int pentru numarul de pozitii
function caesarCipher($textToEncrypt, $shiftPositionsNumber = 13) {
	// Literele alfabetului
    $letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    // Pozitia noua
    $shiftPositionsNumber = (int)$shiftPositionsNumber % 26;
    // Daca nu avem o pozitie noua, iesim din functie cu string-ul dat
	if (!$shiftPositionsNumber){
		return $textToEncrypt;
	}

	// Ne asiguram ca daca pozitia este negativa ne uitam in randul numerelor pozitive
    if ($shiftPositionsNumber < 0) {
    	$shiftPositionsNumber += 26;
    }
    // Daca trebuie sa shiftam numele cu 13 pozitii folosim functia existenta in PHP
    if ($shiftPositionsNumber == 13) {
		return str_rot13($textToEncrypt);
    }

    // Inlocuirea efectiva a caracterelor
    $rep = substr($letters, $shiftPositionsNumber * 2) . substr($letters, 0, $shiftPositionsNumber * 2);
    return strtr($textToEncrypt, $letters, $rep);
}
 
// Executia
$text = "INVATAPROGRAMARE";
$s = 13;
echo "Text : " . $text;
echo "\nShift: " . $s;
echo "\nCifru: " . caesarCipher($text, $s);


iar rezultatul acestui program va fi:
Text : INVATAPROGRAMARE
Shift: 13
Cifru: VAINGNCEBTENZNER

Cum decriptam?
Putem fie sa folosim alta functie pentru decriptare, fie putem folosi proprietatea ciclica a cifrului sub modul, de unde putem observa

Cifru(n) = De-Cifru(26-n)

Deci, putem folosi aceasi frunctie pentru descriptare.

Programator de ~8 ani, am lucrat la proiecte din mai multe industrstrii, de la eCommerce la telecomunicatii la automatizari. In acest timp am folosi diferite tehnologii, de la PHP, MySQL, PostgreSql, RabbitMq, Redis, Memcached si altele.


Get in touch
Pentru nelamuriri, dubii, comentarii si chestii de pe suflet ne putem auzi pe Discord, Reddit sau poti deschide o discutie noua pe forum

real estate investing for doctors # 1 day ago online courses for medical professionals passive income for medical specialists quick ways to earn money from home ways for doctors to monetize their medical blogs
Club-ul este dedicat membrilor si ofera access la mai multe zone ale website-ului.
Login Register

๐Ÿ”– Bookmarks โž•
โœจ Pentru a sustine aceasta comunitate am sa te rog sa te autentifici sau sa te inregistrezi!

๐ŸŒช๏ธ Discord โž•
Back to top
Folosim cookie-uri pentru a oferi functionalitatile critice ale aplicatiei Invata-Programare. Folosim cookie-uri si pentru a analiza traficul, pentru care e nevoie de consimtamantul dvs. explicit.