Billet:Base64

De Sciencinfolycee
Aller à : navigation, rechercher

Codage des nombres : de l'hexadécimal à la base 64

Au delà du codage ASCII des données numériques qui est de 2 à 3 fois plus lourd que le codage binaire direct des nombres qui lui reste tributaire des incompatibilités de codage multiples, une solution est née. Dans le contexte de l'envoi de courriels, où il fallait pouvoir y "attacher" des données numériques binaires de manières efficaces, codées à travers un flux de caractères nativement sur 7 bits, à la rigueur sur 8 bits mais avec des caractères prohibés, un standard astucieux a été proposé.

Quand on veut coder des nombres (entiers) sous une forme aisément transmissible, se pose rapidement la question d'un codage compatible avec l'écriture de textes (donc de pages Web) qui supportent mal la présence de caractères « nuls » (ASCII 0), entre autres. On pourrait évidemment écrire les nombres en chiffres décimaux ou binaires et transcrire ces chiffres dans notre texte comme suite de caractères, mais une telle représentation est fort inefficace ; qui plus est, pour les chiffres décimaux reste en suspens la nécessité de séparer les chiffres relatifs aux nombres successifs. Il est un peu moins mauvais de représenter les nombres en base 16 c’est-à-dire au format hexadécimal dont les « chiffres » sont 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Un octet est alors représenté par deux chiffres hexadécimaux, ce qui revient à doubler la place occupée.

Il existe un codage plus astucieux, nommé Base 64, qui consiste à rassembler les octets à coder par groupe de 3 (soit 24 bits) puis à coder ces 24 bits comme 4 groupes de 6 bits ; chacun de ces groupes est alors recodé comme un caractère pouvant être une lettre majuscule, minuscule ou un chiffre ou l’un des deux signes + et / .

Il est assez correctement décrit dans la page suivante de Wikipedia : http://en.wikipedia.org/wiki/Base64 .

Ce codage (standardisé) est très utilisé dans les échanges de courrier électronique (pour les pièces jointes) et peut fournir la base d’une ou deux séances de TP.

A titre d’exemple, la petite image ci-dessous

Player.jpeg

peut être directement introduite dans une page HTML, de la manière suivante :

<img src="data:image;base64,
 /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUEBAUEAwUFBAUGBgUGCA4JCAcHCBEMDQoOFBEVFBMR
 ExMWGB8bFhceFxMTGyUcHiAhIyMjFRomKSYiKR8iIyL/2wBDAQYGBggHCBAJCRAiFhMWIiIiIiIi
 IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiL/wAARCAAwADADASIA
 AhEBAxEB/8QAGwAAAgIDAQAAAAAAAAAAAAAABwgDBgABBAL/xAAyEAACAQMDAgQEBAcBAAAAAAAB
 AgMEBREABgcSITFBUWETFHGxImKRoRVCUlOB0eHw/8QAGAEBAQEBAQAAAAAAAAAAAAAAAwYFAgD/
 xAAsEQABAgUCAwgDAQAAAAAAAAABAhEAAwUSMSFhBBMUBhUiMlGBoeEWQVJx/9oADAMBAAIRAxEA
 PwBytRzTR08LSzyJHGgyzuwAH1J1k00dPBJNMwSKNSzsfAADJOlK5J5Krt13iWmpJXhtcLlYoVOO
 v8zeujWsIDmNej0ebVJpQgskZPp9webpzDtG1zvE1e1Q6/2E6hn66y2cw7QuTqn8QamdjgCojKj9
 RkaXC3ccXu47PrtxOiwUNLGZF+MSGmHn0/8Au+uTZOybjvS+JS0ClIFIM07A9MS/X10PNW40zFUe
 zdIEpaucfB5i40LYZvh/mHVgniqqeOankWSGQdSOhyCPbUulqtW8YeMOQnsNLdXulg6lWZmAzG3n
 0/Q/r++mRgmjqaeOeBw8Uqh0YeBBGQdOlQVEhUabM4IpVlCw6SzONwcHaKJy/cprbxlXtTt0vOyw
 k+xPf7apnG/ENjrdr269XsS1dVVATCPq6UUZ7Ajz1c+YLe9w4wuPwwS1OVmwB5A4P7HVL435fsFH
 ta3Wa9PJSVVKohVypZGGexz5f50amv8AFGvwXV9znonuvN1uWtDbtBI3+iQ8Y32OJFSNKJlVVGAB
 jGBoNWiu3S3E1HbNm7Yqac1Sn5m4p4zjOMr5j00Y9/zRz8XX2WF1kiejYq6HIYe2gxaaXdi8S0d0
 2bueepFKp+Zt0YGacAk4HiT27/715efaOqM3Rm61+YPPda9pZ23/AK0feBRuDaO4NuxJU7gttRTx
 St0h5F7E+OM/Qaafhm7yXbjChMw/FSs0Ab1A7j740q+4d5bh3HClLfrnPURxN1LG7dgfDOMaabha
 2z23i2hFSvS1Q7SgflOAPtrmV5tMRudqhN7sR1Nt92lrszHD7Z9oINRTxVdLLBUIHilUq6sMgg6U
 jk7jOr2jdXqaGOSa0zNmOULnoP8ASfT6+fjpvNRTwRVUDw1MSSwuMMkihgR7g6VaAsaxH0esTaXN
 vSHScj1+4S63ck3q2bMuG3WZZ6Crj+GpmyWhGe/T/wB1xbK3zc9kXlau3uXhYgTU7H8Mo9CPXTP3
 ThnZ91qfjNQPTt5ink6QffBzrxbuFNm2+qWf5GSoZfBZ5Mr+gA0XLU41xFZ+SUcyVpMk+PVQYan/
 AF87gb5gO2TZjcm8iS3eit0ttsJcSTfEAALfzBcdu/p9tNJBBHS00UFOgSGJAiIPBQBgDWqemhpK
 aOCliSKGMYSNFwFHsNTaZKWiQqdUmceUpZkIDJDuw3P7O8f/2Q==">
 

Voir à ce propos l'article suivant : http://www.bellami.fr/encoder-ses-images-en-base64