next up previous contents
Next: 3.3 Influence de la Up: 3 Chiffrement polyalphabétique Previous: Exemple de chiffrement de   Contents

3.2 Exemple d'implémentation de l'algorithme polyalphabétique du carré de Vigenère

Ce programme (en langage Perl) chiffre le texte entrant en utilisant l'algorithme élaboré par Vigenère. Le chiffrement et le déchiffrement correspondent aux fonctions encrypt et decrypt. Contrairement à l'exemple de la section 2.5, on n'utilise pas le code ASCII pour rester conforme à l'idée de Vigenère. Il est, contrairement à ce qu'on pourrait penser a priori, plus difficile de se limiter aux 26 lettres de l'alphabet que d'utiliser les 256 caractères du code ASCII.

#!/usr/bin/perl

use strict;

use Getopt::Long;

use Text::SimpleUnaccent;

my ( $motcle, $decrypt );

GetOptions(

    'mot-cle=s'   => \$motcle,

    'dechiffrer'  => \$decrypt,

  )

  or die;

$motcle = lc $motcle;

$motcle = unac($motcle);

$motcle = s/[a-z]//g;

die "Erreur: j'ai besoin d'un mot clé\n" if not $motcle;

my $i;

while (<>) {

    if ($decrypt) {

        print decrypt( $_, $motcle );

    }

    else {

        print encrypt( $_, $motcle );

    }

}

sub encrypt {

    my ( $plaintext, $motcle ) = @_;

    $plaintext = lc $plaintext;

    $plaintext = unac($plaintext);

    $plaintext = s/[a-z]//g;

    my @motcle = split //, $motcle;

    my @ciphertext = map {

        chr(

            ( ord($_) + ord( $motcle[ $i++ % @motcle ] ) - 2 * 97 ) % 26 + 97 );

    } split ( //, $plaintext );

    return join "", @ciphertext;

}

sub decrypt {

    my ( $ciphertext, $motcle ) = @_;

    $ciphertext = lc $ciphertext;

    $ciphertext = unac($ciphertext);

    $ciphertext = s/[a-z]//g;

    my @motcle = split //, $motcle;

    my @plaintext =

      map { chr( ( ord($_) - ord( $motcle[ $i++ % @motcle ] ) ) % 26 + 97 ) }

      split ( //, $ciphertext );

    return join "", @plaintext;

}

Voici le programme en utilisation:

$ ./vigenère -mot-cle=cryptographie

Chiffrement polyalphabétique

eyguyfkdecaxsnpyaivgseipyyg

$ ./vigenère -mot-cle=cryptographie -dechiffrer

eyguyfkdecaxsnpyaivgseipyyg

chiffrementpolyalphabetique

On remarque premièrement que les deux « f » de « Chiffrement » ne sont pas chiffrés de la même façon, ce qui est caractérisque du chiffrement polyalphabétique. On remarque ensuite qu'on perd les lettres majuscules, les accents et les espaces lors du chiffrement.


next up previous contents
Next: 3.3 Influence de la Up: 3 Chiffrement polyalphabétique Previous: Exemple de chiffrement de   Contents
Simon Perreault 2002-06-02