Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
900-codage:030_cautres_codages [le 13/02/2025 à 14:40] – supprimée - modification externe (Date inconnue) 127.0.0.1 | 900-codage:030_cautres_codages [le 13/02/2025 à 14:40] (Version actuelle) – ↷ Page déplacée de 030codage:030_cautres_codages à 900-codage:030_cautres_codages prof | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Autres astuces ====== | ||
+ | ===== Code toujours, tu m' | ||
+ | |||
+ | Par une remarquable tendance à la perversité de l' | ||
+ | |||
+ | D' | ||
+ | |||
+ | Pourquoi le parti-pris du texte ? | ||
+ | |||
+ | A cause des caractères de contrôle ! C'est très pratique de disposer de caractères spéciaux qui permettent, comme leur nom l' | ||
+ | |||
+ | De plus, nous n' | ||
+ | |||
+ | Cet exemple n'a pas de réalité, mais le principe est à peu près juste. Suivant les plateformes et les langages de programmation, | ||
+ | |||
+ | La conséquence ? | ||
+ | |||
+ | Ces protocoles ne peuvent pas simplement transférer des données numériques, | ||
+ | |||
+ | La conclusion est qu'il a fallu trouver une astuce pour transporter des données purement numériques sur un protocole qui n'est pas prévu pour ça. | ||
+ | |||
+ | ===== Codage à tous les étages ===== | ||
+ | |||
+ | Le jeu va consister maintenant à coder une donnée purement numérique sous une forme alphabétique, | ||
+ | |||
+ | Tordu, n' | ||
+ | |||
+ | Oui, mais comment faire autrement ? Les révolutions, | ||
+ | |||
+ | Comme il est clair, à la lueur de ce que nous avons vu jusqu' | ||
+ | |||
+ | C'est parti pour la grande cuisine. | ||
+ | |||
+ | ==== Le codage « quoted printable » ==== | ||
+ | |||
+ | Ce codage est principalement employé pour transformer un texte écrit avec un codage sur 8 bits en un texte qui ne contiendra que des caractères codables sur 7 bits. Vous allez voir comme c'est simple : | ||
+ | |||
+ | D' | ||
+ | |||
+ | Ensuite, nous allons utiliser un « code d' | ||
+ | |||
+ | Un petit exemple vaudra bien mieux qu'un long discours... | ||
+ | |||
+ | * le **é** dont le code 8 bits est **E9**, sera codé sur trois caractères de 7 bits de la façon suivante : **=E9** | ||
+ | * De la même façon, le** è **sera codé **=E8**. | ||
+ | * le **ç** donnera **=E7** | ||
+ | * le **à** donnera **=E0** | ||
+ | * Comme le **=** revêt une signification particulière : C'est le code d' | ||
+ | |||
+ | L' | ||
+ | |||
+ | Ainsi, nous transporterons nos données uniquement sous la forme de caractères US-ASCII (7 bits), même s'ils nécessitent 8 bits pour être définis. En effet, les caractères **=**, **E**, et ** 0** ont tous des codes ASCII sur 7 bits. | ||
+ | |||
+ | Astucieux non ? | ||
+ | |||
+ | Bien entendu, il vaut mieux le savoir pour décoder correctement le message. Cette méthode est utilisée principalement pour les e-mails. En voici un exemple : | ||
+ | < | ||
+ | Return-Path: | ||
+ | ... | ||
+ | From: " | ||
+ | To: < | ||
+ | Subject: quoted | ||
+ | Date: Tue, 5 Nov 2002 10:51:34 +0100 | ||
+ | <span class=" | ||
+ | Content-Type: | ||
+ | charset= " | ||
+ | Content-Transfer-Encoding: | ||
+ | ... | ||
+ | X-Mailer: Microsoft Outlook Express 6.00.2800.1106 | ||
+ | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 | ||
+ | |||
+ | <span class=" | ||
+ | </ | ||
+ | Notez que l'on parle ici de MIME, en indiquant, la nature du contenu (text/ | ||
+ | === Remarque === | ||
+ | Aujourd' | ||
+ | |||
+ | ==== Le codage Base64 ==== | ||
+ | |||
+ | Plus généralement, | ||
+ | |||
+ | Là aussi, il faudra commencer par indiquer en quel code est écrit le texte initial. Pour nous, toujours iso-8859-1. | ||
+ | |||
+ | Trois caractères de 8 bits (24 bits au total) sont découpés sous la forme de 4 paquets de 6 bits (toujours 24 bits au total). Chaque valeur sur 6 bits, comprise donc entre 0 et 3F en hexadécimal, | ||
+ | |||
+ | | dec | hex | car. | | dec | hex | car. | | dec | hex | car. | | dec | hex | car. | | ||
+ | | 0 | 0 | A | | 16 | 10 | Q | | 32 | 20 | g | | 48 | 30 | w | | ||
+ | | 1 | 1 | B | | 17 | 11 | R | | 33 | 21 | h | | 49 | 31 | x | | ||
+ | | 2 | 2 | C | | 18 | 12 | S | | 34 | 22 | i | | 50 | 32 | y | | ||
+ | | 3 | 3 | D | | 19 | 13 | T | | 35 | 23 | j | | 51 | 33 | z | | ||
+ | | 4 | 4 | E | | 20 | 14 | U | | 36 | 24 | k | | 52 | 34 | 0 | | ||
+ | | 5 | 5 | F | | 21 | 15 | V | | 37 | 25 | l | | 53 | 35 | 1 | | ||
+ | | 6 | 6 | G | | 22 | 16 | W | | 38 | 26 | m | | 54 | 36 | 2 | | ||
+ | | 7 | 7 | H | | 23 | 17 | X | | 39 | 27 | n | | 55 | 37 | 3 | | ||
+ | | 8 | 8 | I | | 24 | 18 | Y | | 40 | 28 | o | | 56 | 38 | 4 | | ||
+ | | 9 | 9 | J | | 25 | 19 | Z | | 41 | 29 | p | | 57 | 39 | 5 | | ||
+ | | 10 | A | K | | 26 | 1A | a | | 42 | 2A | q | | 58 | 3A | 6 | | ||
+ | | 11 | B | L | | 27 | 1B | b | | 43 | 2B | r | | 59 | 3B | 7 | | ||
+ | | 12 | C | M | | 28 | 1C | c | | 44 | 2C | s | | 60 | 3C | 8 | | ||
+ | | 13 | D | N | | 29 | 1D | d | | 45 | 2D | t | | 61 | 3D | 9 | | ||
+ | | 14 | E | O | | 30 | 1E | e | | 46 | 2E | u | | 62 | 3E | + | | ||
+ | | 15 | F | P | | 31 | 1F | f | | 47 | 2F | v | | 63 | 3F | / | | ||
+ | |||
+ | Comme cette explication doit paraître fumeuse à plus d'un (moi-même, plus je la relis, plus je la trouve fumeuse), là encore, prenons un exemple. Soit à coder le texte extrêmement simple : **012** | ||
+ | |||
+ | Ce texte est destiné à être écrit avec un codage iso-8859-1. | ||
+ | |||
+ | | caractère initial| | ||
+ | | Code ASCII hexa| 30 | 31 | 32 | | ||
+ | | Code ASCII binaire| 00110000 | 00110001 | 00110010 | | ||
+ | |||
+ | Bien. nous avons donc la suite de 24 bits suivante : 001100000011000100110010. Nous allons maintenant la couper en quatre morceaux de 6 bits : | ||
+ | |||
+ | | les valeurs sur 6 bits | 001100 | 000011 | 000100 | 110010 | | ||
+ | | Equivalent hexadécimal | 0C | 03 | 04 | 32 | | ||
+ | | Caractère équivalent en Base64 | M | D | E | y | | ||
+ | |||
+ | Et voilà. **012** donne, une fois codé en Base 64 **MDEy**. Constatez comme c'est simple. Constatez surtout que ces caractères seront transcrits en US-ASCII, donc sur 7 bits. | ||
+ | |||
+ | Pour décoder, il suffit de le faire dans l' | ||
+ | |||
+ | Refaisons la manip avec un e-mail codé en Base64 : | ||
+ | < | ||
+ | Return-Path: | ||
+ | ... | ||
+ | From: " | ||
+ | To: < | ||
+ | Subject: Base 64 (1) | ||
+ | Date: Tue, 5 Nov 2002 11:07:11 +0100 | ||
+ | <span class=" | ||
+ | Content-Type: | ||
+ | charset= " | ||
+ | Content-Transfer-Encoding: | ||
+ | ... | ||
+ | X-Mailer: Microsoft Outlook Express 6.00.2800.1106 | ||
+ | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 | ||
+ | |||
+ | <span class=" | ||
+ | </ | ||
+ | Et voilà le travail. | ||
+ | |||
+ | Ca, c'est une démo « commerciale », c'est à dire, qui ne montre que ce qui est facile et qui marche bien. Vos messages contiennent tous un nombre de caractères qui est un exact multiple de 3 ? | ||
+ | |||
+ | Dans ce cas (nombre de caractères qui n'est pas un multiple de 3) , le système de codage va « remplir le trou » avec un caractère spécial, qui ne sera pas interprété à l' | ||
+ | |||
+ | Voyons ce que ça donne si le texte initial ne contient plus que le seul caractère **0**. | ||
+ | |||
+ | * Le premier groupe de 6 octets sera toujours le même : 001100 qui donne **M** | ||
+ | * Le second sera : 00 (complété avec des 0, donc : 000000) qui donne **A** | ||
+ | * Comme il faut 24 bits quand même, on ajoutera deux fois le caractère **=** | ||
+ | |||
+ | Au total, on aura **MA==** | ||
+ | |||
+ | Vérification par l' | ||
+ | |||
+ | < | ||
+ | Return-Path: | ||
+ | ... | ||
+ | From: « Christian Caleca » < | ||
+ | To: < | ||
+ | Subject: base 64 (3) | ||
+ | Date: Tue, 5 Nov 2002 11:18:06 +0100 | ||
+ | <span class=" | ||
+ | Content-Type: | ||
+ | charset= »iso-8859-1 » | ||
+ | Content-Transfer-Encoding: | ||
+ | ... | ||
+ | X-Mailer: Microsoft Outlook Express 6.00.2800.1106 | ||
+ | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 | ||
+ | |||
+ | <span class=" | ||
+ | </ | ||
+ | CQFD. | ||
+ | |||
+ | Nous verrons que ce codage base64, qui permet de transformer tout octet en un équivalent ASCII, permettra par exemple de coder des pièces jointes de types divers dans les e-mails. | ||
+ | |||
+ | ==== Et les autres... ==== | ||
+ | |||
+ | === uuencode === | ||
+ | |||
+ | Bien entendu, d' | ||
+ | |||
+ | === BinHex === | ||
+ | |||
+ | Un codage propriétaire, | ||
+ | |||
+ | Vous le voyez, les astuces ne manquent pas pour utiliser exclusivement de l' | ||
+ | |||
+ | ===== Conclusions ===== | ||
+ | |||
+ | En plus du codage des caractères dans des tables de 7 , 8 ou plus, il faut donc ajouter des systèmes qui vont s' | ||
+ | |||
+ | Ceci nous amène naturellement à parler de MIME... | ||
Autres astuces: Dernière modification le: 01/01/1970 à 00:00 par