Thomas Zilliox
Expert CSS Freelance à Lyon

Code César en JavaScript

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.

La formule de Haversine sous forme d'équation algébrique
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

L'homme qui murmurait à l'oreille des chevrons.

Je développe, j'intègre, je forme ou je conseille sur les CSS. Besoin d'améliorer la maintenabilité ou les performances de vos projets ?