Il cifrario di Cesare in JavaScript

Il cifrario di Cesare è uno dei cifrari più antichi e semplici utilizzati nella crittografia. Prende il nome da Giulio Cesare, che si dice lo abbia utilizzato per comunicare in modo sicuro durante le sue campagne militari. In questa pagina, esploreremo il cifrario di Cesare e impareremo come implementarlo utilizzando il linguaggio di programmazione JavaScript. Scopriremo i concetti di base di questo cifrario, vedremo come cifrare e decifrare messaggi e forniremo esempi pratici per comprendere appieno il processo.

Il cifrario di Cesare è un cifrario a sostituzione monoalfabetica, il che significa che ogni lettera del testo in chiaro viene sostituita con un'altra lettera dello stesso alfabeto, spostandola di un numero fisso di posizioni. Ad esempio, con uno spostamento di 3 posizioni, la lettera "A" sarebbe sostituita con "D", la lettera "B" con "E", e così via. Questo numero fisso di posizioni è chiamato "chiave" o "scostamento".

Implementazione del cifrario di Cesare in JavaScript

Per implementare il cifrario di Cesare in JavaScript, dobbiamo creare una funzione che cifri un messaggio e una funzione che lo decifri. Vediamo prima come cifrare un messaggio.

function cifraCesare(testo, chiave) {
	let testoCifrato = "";

	for (let i = 0; i < testo.length; i++) {
		let carattere = testo[i];

		if (carattere.match(/[a-z]/i)) {
			const maiuscolo = carattere === carattere.toUpperCase();
			carattere = carattere.toLowerCase();

			const codiceAscii = carattere.charCodeAt(0);
			const codiceCifrato = ((codiceAscii - 97 + chiave) % 26) + 97;

			let carattereCifrato = String.fromCharCode(codiceCifrato);

			if (maiuscolo) {
				carattereCifrato = carattereCifrato.toUpperCase();
			}

			testoCifrato += carattereCifrato;
		} else {
			testoCifrato += carattere;
		}
	}

	return testoCifrato;
}

const messaggioInChiaro = "Ciao, mondo!";
const chiave = 3;
const messaggioCifrato = cifraCesare(messaggioInChiaro, chiave);
console.log("Messaggio cifrato:", messaggioCifrato);

In questo esempio, la funzione cifraCesare prende un testo in chiaro e una chiave come input e restituisce il messaggio cifrato. La funzione scorre ogni carattere del testo in chiaro e, se è una lettera dell'alfabeto, la cifra utilizzando il cifrario di Cesare.

Per decifrare il messaggio possiamo utilizzare la funzione precedente, passando come chiave il valore 26 - chiave. In questo modo riotteniamo le lettere originarie.

function decifraCesare(testoCifrato, chiave) {
	return cifraCesare(testoCifrato, 26 - chiave);
}

const messaggioDecifrato = decifraCesare(messaggioCifrato, chiave);
console.log("Messaggio decifrato:", messaggioDecifrato);

Mentre il Cifrario di Cesare è affascinante e un ottimo esempio introduttivo agli algoritmi di cifratura, è importante notare che non è sicuro per la crittografia moderna. Con solo 26 possibili spostamenti in un alfabeto inglese, è estremamente vulnerabile ad attacchi di forza bruta. Tuttavia, studiare il Cifrario di Cesare è un ottimo punto di partenza per comprendere concetti più complessi di crittografia.

Conclusione

Il Cifrario di Cesare è un metodo storico di cifratura che offre un'introduzione pratica agli algoritmi di crittografia. Implementarlo in JavaScript non solo è un ottimo esercizio per affinare le proprie abilità di programmazione, ma fornisce anche una base per comprendere concetti di crittografia più avanzati. Nonostante la sua semplicità, il Cifrario di Cesare è un punto di partenza fondamentale per chiunque sia interessato alla crittografia e alla sicurezza informatica.