ASCII, Unicode et représentation du texte
Comprenez comment le texte devient des octets et pourquoi l’encodage des caractères est important dans les contextes cryptographiques.
ASCII, Unicode et représentation du texte est une leçon Cryptology Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Cryptology Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Cryptology Academy comprend 4 leçons au total.
ASCII comme codage sur 7 bits
ASCII (American Standard Code for Information Interchange), normalisé en 1963, encode 128 caractères sur 7 bits (valeurs de 0 à 127). Il couvre l’alphabet anglais (majuscules et minuscules), les chiffres, les signes de ponctuation et les caractères de contrôle.
ASCII a été conçu pour l’anglais et les équipements de télécommunication américains. Il convenait bien à son objectif initial, mais était fondamentalement inadapté à toute langue autre que l’anglais.
Caractères de contrôle en ASCII
Les 32 premiers caractères ASCII (0-31), ainsi que DEL (127), sont des caractères de contrôle. Ils ont été conçus à l’origine pour commander des téléscripteurs : LF (saut de ligne, 10), CR (retour chariot, 13), BEL (sonnerie, 7), TAB (9), ESC (27).
Dans les contextes cryptographiques, les caractères de contrôle peuvent provoquer des problèmes. Un octet nul (0x00) termine prématurément les chaînes C, et un caractère DEL ou ESC peut être interprété par des émulateurs de terminal.
ASCII étendu et ses problèmes
Différents pays ont créé leurs propres extensions d’ASCII en utilisant le 8e bit (valeurs 128-255), créant des centaines d’encodages incompatibles : ISO-8859-1 (Latin-1) pour l’Europe occidentale, KOI-8R pour le russe, Big5 pour le chinois.
Un document enregistré dans un encodage apparaît comme du charabia lorsqu’il est ouvert avec un encodage différent. L’absence d’une norme universelle a rendu le développement international de logiciels particulièrement difficile tout au long des années 1980 et 1990.
Unicode comme jeu de caractères universel
Unicode a été créé pour fournir un jeu de caractères universel unique couvrant tous les systèmes d’écriture humains. Il définit actuellement plus de 149 000 caractères couvrant 161 écritures, y compris des écritures historiques et des symboles.
Unicode sépare l’identité du caractère (un point de code, comme U+0041 pour "A") de l’encodage (la manière dont ce point de code est stocké dans des octets). Cette séparation permet à plusieurs formats d’encodage de représenter les mêmes caractères.
Encodage UTF-8 à longueur variable
UTF-8 encode les points de code Unicode en utilisant de 1 à 4 octets. Les caractères ASCII (de U+0000 à U+007F) utilisent exactement 1 octet, identique à leur valeur ASCII, ce qui rend UTF-8 rétrocompatible avec ASCII.
Les caractères de U+0080 à U+07FF utilisent 2 octets. Ceux de U+0800 à U+FFFF utilisent 3 octets (ce qui couvre la plupart des écritures courantes, notamment le chinois, le japonais et le coréen). U+10000 et les valeurs supérieures utilisent 4 octets.
UTF-16 et UTF-32
UTF-16 utilise 2 octets pour les caractères les plus courants (le plan multilingue fondamental, de U+0000 à U+FFFF) et 4 octets (paires de substitution) pour les caractères au-delà de U+FFFF. Il est utilisé en interne par Windows et Java.
UTF-32 utilise exactement 4 octets par point de code, ce qui le rend à largeur fixe et facile à indexer par position de caractère, mais inefficace pour les textes principalement composés de caractères ASCII. Il est utilisé dans certaines représentations internes pour permettre un accès aléatoire rapide.
Marqueur d’ordre des octets (BOM)
Le marqueur d’ordre des octets (BOM) est le caractère Unicode U+FEFF placé au début d’un fichier pour indiquer l’ordre des octets et l’encodage. Dans UTF-16, il distingue l’ordre gros-boutiste (FE FF) de l’ordre petit-boutiste (FF FE).
En UTF-8, le BOM (EF BB BF) est inutile puisque UTF-8 ne présente aucun problème d’ordre des octets, mais certains logiciels Windows l’ajoutent malgré tout. Cela provoque des problèmes dans les applications cryptographiques où le BOM est traité comme une donnée plutôt que comme un marqueur.
Pourquoi l’encodage est important en cryptographie
Les fonctions de hachage cryptographique et les codes d’authentification de message (MAC) opèrent sur des séquences d’octets, et non sur des caractères abstraits. La même chaîne "café" est encodée différemment en UTF-8 (4 octets : 63 61 66 C3 A9) et en Latin-1 (4 octets : 63 61 66 E9).
Si deux systèmes hachent la même chaîne, mais utilisent des encodages différents, ils produiront des hachages différents et l’authentification échouera. Les protocoles cryptographiques doivent spécifier explicitement l’encodage afin de garantir l’interopérabilité.
Les émojis en UTF-8
Les émojis sont des caractères Unicode du plan multilingue supplémentaire. L’émoji "visage souriant" (U+1F600) s’encode sur 4 octets en UTF-8 : F0 9F 98 80.
Dans les contextes de sécurité, des émojis et des caractères Unicode pleine chasse ont été utilisés dans des attaques par homographes, où une URL comme "xn--pple-43d.com" (qui ressemble à "apple.com") incite les utilisateurs à consulter un site malveillant.
Normalisation Unicode et cryptographie
Certains caractères peuvent être représentés sous plusieurs formes Unicode. Le "e avec accent aigu" peut être U+00E9 (précomposé) ou U+0065 U+0301 (e suivi d’un accent combiné, décomposé). Ces deux formes ont la même apparence, mais des représentations en octets différentes.
Les systèmes cryptographiques qui ne normalisent pas Unicode avant le hachage peuvent produire des hachages différents pour des chaînes visuellement identiques. La normalisation NFKC est couramment recommandée avant l’application d’opérations cryptographiques à du texte.
Choisir le bon encodage pour la cryptographie
Lors de la mise en œuvre de systèmes cryptographiques, le choix de l’encodage est une décision critique qui doit être documentée. Les mots de passe doivent être encodés en UTF-8 avant leur hachage. Les champs de protocole doivent spécifier leur encodage dans leurs documents de spécification.
Les échecs d’interopérabilité dus à des incompatibilités d’encodage sont une source courante de bogues dans les systèmes cryptographiques. Deux implémentations d’un même protocole peuvent produire des résultats d’authentification différents si elles encodent les chaînes différemment.
Questionnaire sur l’encodage UTF-8
Vérifiez votre compréhension de l’encodage UTF-8.
Points essentiels : encodage du texte
ASCII couvre 128 caractères sur 7 bits. Unicode fournit un espace universel de points de code pour toutes les écritures humaines. UTF-8 encode Unicode sur 1 à 4 octets, ASCII constituant un sous-ensemble sur 1 octet.
En cryptographie, l’encodage est important, car les fonctions de hachage opèrent sur des octets. Le même texte produit des hachages différents lorsqu’il est encodé différemment. La normalisation Unicode est essentielle avant les opérations cryptographiques sur du texte.
Questions Fréquemment Posées
La leçon « ASCII, Unicode et représentation du texte » est-elle gratuite ?
Oui — le texte complet de « ASCII, Unicode et représentation du texte » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Cryptology Academy, passe à CoddyKit PRO. Le cours Cryptology Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « ASCII, Unicode et représentation du texte » ?
Comprenez comment le texte devient des octets et pourquoi l’encodage des caractères est important dans les contextes cryptographiques. Tu pratiques Cryptology Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Cryptology Academy ?
Aucune expérience préalable n'est requise. Cryptology Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « ASCII, Unicode et représentation du texte » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Cryptology Academy ?
Oui. Chaque leçon Cryptology Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Encodage Base64 : comment ça fonctionne
- ASCII, Unicode et représentation du texte
- L’hexadécimal dans les sorties cryptographiques
- Encodage, chiffrement et hachage