Tag Archives: string

Cryptage XOR en Java (version 2)

Le cryptage XOR (aussi dit OU Exclusif) reste une façon simple de crypter très rapidement une chaine de caractères.
Ma première version, consistait à faire un OU Exclusif entre chacun des caractères de la chaine et une clé d’un caractère. Cette fois-ci, la clef est une chaine de plusieurs caractères. Le cryptage est rotatif, c’est à dire qu’une même lettre n’est pas codé de la même manière.

L’avantage de cette nouvelle version est de crypter bien mieux un texte, le rendant bien moins facile à déchiffrer. Les temps de traitement sont toujours aussi rapide. La même fonction permet toujours de crypter et décrypter la chaine.
Le seul inconvénient est que si la chaine cryptée est corrompue par ajout ou suppression d’un caractère, toute la chaine en aval de celui-ci ne sera pas décryptée. En revanche, un remplacement d’un caractère par un autre se traduira seulement par un seul caractère corrompu au déchiffrage.

public String crypterXOR(String chaine, String clef)
{
    String chaineCryptee = "";
    for(int i = 0, j = 0; i < chaine.length(); i++)
    {
        chaineCryptee += (char)((int)chaine.charAt(i) ^ (int)clef.charAt(j));
        j++;
        if(j >= clef.length()) j = 0;
    }
    return chaineCryptee;
}

Cryptage XOR en Java

Actuellement je travaille avec PetitPied sur un projet dont il a parlé plusieurs fois (Projet : Led Controller, Projet : Avancement Led Controller, et Projet : Interface Graphique).
J’aide à la création de l’application Java qui permettra de communiquer en SSH avec la carte électronique.

J’ai eu l’occasion de chercher une solution simple pour crypter un mot de passe contenu dans un fichier texte visible. Mon choix s’est alors porté sur un cryptage XOR (ou OU Exclusif).

Ce cryptage, assez rapide de par sa simplicité, peut crypter une chaîne de caractère facilement à l’aide de l’opérateur OU Exclusif et la décrypter de la même façon.
Ainsi, la même fonction peut crypter et décrypter, simple et efficace !

Une clef permet le codage de chaîne.
Dans le projet, le cryptage n’étant pas la priorité, j’utilise une clef d’un seul caractère. Toutefois, on peut coder avec une clef de plusieurs caractères, en faisant quelques modifications au code que je vous propose.

public String crypterXOR(String chaine, int clef)
{
    String chaineCryptee = "";
    for(int i = 0; i < chaine.length(); i++)
    {
        chaineCryptee += (char)((int)chaine.charAt(i) ^ clef);
    }
    return chaineCryptee;
}