Xifratge de Cèsar

El xifratge de Cèsar, o Caesar cipher en anglès, és un senzill xifrat de substitució en què cada lletra de l’alfabet es substitueix per una altra situada a tres posicions de distància. Així, la A es substitueix per la D, la B per la E, la Y per la B i la Z per la C. Es pot expressar fàcilment substituint cada lletra per la seva posició (A=1, B=2, etc.) i sumant-li 3 mòdul 26. Per desencriptar n’hi ha prou amb restar 3 a cada lletra. El xifrat no és segur, es pot trencar fàcilment amb un anàlisi de freqüència de les lletres del text xifrat.

De totes maneres, per aprofitar a trastejar una mica amb el Perl i aprendre alguna cosa he fet un petit script que permet encriptar i desencriptar text utilitzant el xifratge de Cèsar, o l’equivalent desplaçant un altre número de posicions. Com que és molt curt, el poso directament aquí per si algú el troba interessant:

#! /usr/bin/perl -s

if ($h) {
    print<<"INFO";
$0 - Caesar cypher
Usage: $0 [-d] [NUM]
Reads from stdin, outputs to stdout. NUM is the letter shift (default is 3).
Use -d for decypher.
INFO
    exit 0;
}

$f = $d ? -1 : 1;
$s = shift;
$s = 3 unless defined $s;

while (<>) {
    y/a-z/A-Z/;
    y/A-Z//dc;
    $o .= $_;
}

$o .= 'X' while length ($o)%5;
$o =~ s/./chr((ord($&)-ord('A')+$f*$s)%26+ord('A'))/eg;
$o =~ s/(.{5})/$1 /g;
print "$o\n";