Comment chiffrer et déchiffrer du texte avec RC4

Cette page chiffre et déchiffre du texte avec RC4 dans le navigateur. Le résultat est du texte Base64 dans le conteneur de phrase de passe de CryptoJS qui commence par U2FsdGVkX1, et la même phrase de passe de passe redonne le texte d'origine. RC4 est un chiffrement de flux ancien, aux biais connus : utilisez la page pour lire des données héritées et reproduire la sortie d'autres outils, pas pour protéger de nouvelles données.

Le texte et la phrase de passe restent dans la page : rien n'est envoyé, et l'opération se termine aussi bien avec le réseau coupé. Rien n'est stocké non plus, donc une phrase perdue ne peut pas être retrouvée ici. L'entrée et la sortie sont du texte uniquement : pas d'envoi de fichier, pas de mode binaire, pas de bouton de téléchargement.

  1. Collez le texte à chiffrer dans la zone de texte et saisissez la phrase de passe dans le champ à côté des boutons.
  2. Cliquez sur Chiffrer. Le résultat Base64 apparaît dans le panneau ci-dessous ; le même texte et la même phrase de passe donnent une chaîne différente à chaque exécution, car chaque calcul tire un nouveau sel aléatoire.
  3. Pour relire un message, collez la chaîne Base64 complète dans la zone de texte, saisissez la même phrase de passe de passe et cliquez sur Déchiffrer.
  4. Copy copie le résultat dans le presse-papiers ; Clear vide la zone de texte, la phrase de passe et le résultat.
  5. Conservez la phrase de passe en lieu sûr : c'est le seul secret de l'opération, et la page n'en garde aucune copie, pas plus que du texte.

Le conteneur, OpenSSL et les limites de RC4

Ce que contient le résultat Base64

La sortie est un conteneur de phrase de passe CryptoJS : les huit octets Salted__ (d'où le début U2FsdGVkX1), huit octets de sel aléatoire, puis la sortie RC4, le tout encodé en Base64. Le matériel de clé est dérivé de la phrase de passe et du sel avec EVP_BytesToKey et MD5, sur 32 octets. Lors des tests, une implémentation indépendante de cette dérivation a déchiffré la sortie de cette page, et un texte chiffré construit de la même façon a été déchiffré par la page.

Le déchiffrement lit le sel dans le conteneur : seule la phrase de passe doit accompagner le texte chiffré. Un sel différent signifie un flux de clé différent, d'où une chaîne différente à chaque exécution pour la même phrase de passe et un retour au même texte dans tous les cas. Le texte est lu en UTF-8 ; ce qui n'est pas de l'UTF-8 valide ne peut pas être représenté ici.

OpenSSL et cette page ne parlent pas le même RC4

OpenSSL dérive une clé RC4 de 16 octets (openssl enc -rc4 -md md5 ; -rc4-40 en utilise cinq), alors que CryptoJS sur cette page en utilise 32 : les deux ne peuvent pas lire la sortie de l'autre. Lors des tests, OpenSSL a transformé un texte chiffré de la page en données illisibles, et cette page a répondu à un conteneur openssl enc -rc4 par le message de phrase de passe incorrecte. Fournir une clé plus longue à OpenSSL ne corrige rien : -K avec 64 caractères hexadécimaux a affiché « hex string is too long, ignoring excess » et retenu les 16 premiers octets.

Interopérer suppose donc d'implémenter la même dérivation de clé : EVP_BytesToKey(MD5) sur la phrase de passe et le sel, prendre 32 octets, puis exécuter RC4. Pour une contrepartie en ligne de commande qui fonctionne sans modification, utilisez la page AES de cette famille, qui correspond exactement à openssl enc -aes-256-cbc -md md5 ; openssl enc -rc4 est lui aussi hérité et n'est proposé par OpenSSL 3 que via le fournisseur legacy.

Phrase incorrecte, octets modifiés, texte chiffré tronqué

Une phrase de passe incorrecte ou une chaîne qui n'est pas l'un de ces conteneurs est signalée sous les boutons, dans la langue de la page. Le contrôle est un test de validité UTF-8 sur les octets déchiffrés : c'est un confort, pas une garantie. Lors des tests, 24 tentatives avec une phrase de passe incorrecte ont toutes été signalées, mais un flux de clé qui se décode par hasard comme du texte passe sans avertissement.

RC4 n'offre aucune authentification : ni les modifications ni la troncature ne sont détectées de façon fiable. Modifier un octet du texte chiffré a changé exactement un caractère du texte retrouvé, sans aucun avertissement, et couper le texte chiffré à environ 60 % de sa longueur a renvoyé le début de la phrase comme s'il s'agissait du message entier. Là où l'intégrité compte, utilisez un chiffrement authentifié comme AES-GCM ; cette page sert à reproduire et inspecter des données RC4 héritées.

Outils récents :