Thomas Zilliox
Expert CSS Freelance à Lyon

Code César en JavaScript

En tant que co-créateur de Zupple, team building et énigmes à Lyon, j’adore les codes secrets ! Dans cet article, je vais vous partager le mécanisme qui est à la base de toute la cryptographie classique : le code César.

Le code César, ou chiffre de César, est une technique de chiffrement qui était utilisé par Jules César. Chaque lettre du message original est remplacée par une lettre décalée dans l’alphabet. Par exemple, avec un décalage de 3 un « A » est chiffré en « D », un « B » en « E », etc.

Le mot « DEMOS » chiffré avec un code César donne « GHPRV ».
Tableau de décalage de lettres, contenant

Le décalage doit être connu du destinataire, c’est ce qu’on appelle la clé. Le décalage sera constant pour la totalité du message, contrairement au code César Progressif ou au code Vigenere. C’est ce qui fait sa faiblesse, il est facile à détecter et à déchiffrer.

Nous avons vu comment décaler les lettres dans l’alphabet, on a donc tout ce qu’il nous faut pour encoder et décoder des messages en utilisant le chiffre César.

/**
 * Returns the message encoded with the Caesar cipher, the offset depends on key
 *
 * @param {string} message
 * @param {number} key
 * @param {boolean} isDecoding - true to decode instead of encode
 * @return {string} The encoded message
 */
function encodeCaesar(message, key, isDecoding) {
  return message
    .split("")
    .map(function(letter) {
      if (!isLetterInAlphabet(letter)) {
        return letter;
      }

      return shiftLetter(letter, isDecoding ? -key : key);
    })
    .join("");
}
Voir les dépendances
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");

// See https://tzi.fr/decaler-lettres/
function shiftLetter(letter, offset) {
  if (!isLetterInAlphabet(letter)) {
    return letter;
  }

  return numberToLetter(letterToNumber(letter) + offset);
}

// See https://tzi.fr/js/convertir-lettres-en-nombres/
function isLetterInAlphabet(letter) {
  return alphabet.includes(letter.toUpperCase());
}
function letterToNumber(letter) {
  if (!isLetterInAlphabet(letter)) {
    return false;
  }

  return alphabet.indexOf(letter.toUpperCase()) + 1;
}

// See https://tzi.fr/js/convertir-nombres-en-lettres/
function numberToLetter(position) {
  return getLetterByAlphabeticPosition(
    moduloClamp(position, 1, alphabet.length)
  );
}
function getLetterByAlphabeticPosition(position) {
  if (position < 1 || position > alphabet.length) {
    return false;
  }

  return alphabet[position - 1];
}

// See https://tzi.fr/js/modulos-min-max
function moduloClamp(number, min, max) {
  return positiveModulo(number - min, max + 1 - min) + min;
}

// See https://tzi.fr/js/modulos-positifs
function positiveModulo(number, divisor) {
  return ((number % divisor) + divisor) % divisor;
}

Essayez

Chiffre César

Action :

Amusez-vous bien, Thomas.

That's my face!

Thomas ZILLIOX

Je suis Thomas Zilliox, l'homme qui murmurait à l'oreille des chevrons, un développeur CSS freelance sur Lyon.

Je suis aussi le co-créateur de la société Zupple qui crée, organise, et anime des team building et escape games à Lyon.