Quel est le but du codage en base 64 et pourquoi il est utilisé dans l'authentification de base HTTP?

129

Je n'obtiens pas le cryptage Base64.

Si l'on peut décrypter une chaîne Base64, quel est son objectif?

Pourquoi est-il utilisé pour l'authentification HTTP Basic?

C'est comme dire à quelqu'un que mon mot de passe est inversé dans OLLEH.

Les personnes qui voient OLLEH sauront que le mot de passe d'origine était HELLO.

Ajsie
la source
10
base64 n'est pas un cryptage, c'est un encodage
n611x007

Réponses:

249

Base64 n'est pas un cryptage - c'est un encodage. C'est une façon de représenter des données binaires en utilisant uniquement des caractères imprimables (texte).

Voir ce paragraphe de la page wikipedia pour l'authentification de base HTTP :

Bien que l'encodage du nom d'utilisateur et du mot de passe avec l'algorithme Base64 les rend généralement illisibles à l'œil nu, ils sont aussi facilement décodés qu'ils sont encodés. La sécurité n'est pas le but de l'étape de codage. L'intention du codage est plutôt de coder les caractères non compatibles HTTP qui peuvent être dans le nom d'utilisateur ou le mot de passe dans ceux qui sont compatibles HTTP.

Ponts de Matt
la source
4
En outre, il semble que le codage de caractères approprié pour obtenir les 'données binaires' à partir de la chaîne, devrait être iso-8859-1 . ( source )
Myobis
60

C'est normalement appelé encodage base64, pas cryptage! La bonne chose à propos du codage base64 est qu'il vous permet de représenter des données (binaires) en utilisant uniquement un sous-ensemble limité et commun des caractères disponibles, bien plus efficacement que d'écrire simplement une chaîne de 1 et de 0 en ASCII par exemple.

Flexo
la source
6
+1, mais la comparaison avec le stockage de données en 1s, 0s stream est trop exagérée. Il est préférable de le comparer au stockage de données au format hexadécimal. Parce que hex ne ferait que x2plus d'octets que le flux d'origine, et 1s, 0s - fait des x8fois plus d'octets. (Et Base64 crée x1.3plus de données que le tableau d'octets d'origine). Il est donc parfois acceptable d'encoder un flux binaire sous forme de chaîne hexadécimale, en doublant la quantité d'octets - par exemple, simplement pour stocker le hachage du mot de passe dans la base de données.
Agnius Vasiliauskas
30

En crypt ion nécessite une clé (chaîne ou algorithme) pour décrypter; d'où la "crypte" (racine: cryptographie )

En cód ing modifie les / déplacements / modifier un code de caractères dans une autre. Dans ce cas, les octets habituels de données peuvent désormais être facilement représentés et transportés via HTTP.

vol7ron
la source
5
Le cryptage signifie simplement «rendre caché» - la cryptographie à base de clés est une invention très récente. Le chiffrement est une forme d'encodage qui a été utilisée comme chiffrement (mais pas par toute personne de plus de 12 ans depuis des centaines d'années).
2
Le cryptage en langue vernaculaire est utilisé pour désigner les modes de cryptage récents, en particulier le cryptage informatique, qui est basé sur la clé (clé publique / privée). Bien que cela soit vrai, il n'est pas nécessaire d'indiquer une définition littérale d'un mot daté; sinon, vous argumenteriez sur la définition historique de nombreux mots anglais utilisés aujourd'hui. La langue vernaculaire (et parfois familière) est ce qui donne aux mots un contexte et donc une définition.
vol7ron
1
Je ne pense pas que vous ayez l'air impoli; Je suis d'accord avec votre point de vue sur le contexte moderne. Les mots et les définitions évoluent constamment. Je pense que «encoder» et «crypter» ont définitivement deux définitions très distinctes dans l'informatique moderne et votre réponse fait un bon effort pour résumer les différences.
Dan Bechard
L'encodage Base64 est une forme d'obfuscation, ce qui signifie simplement rendre flou. Pour de nombreuses applications, il s'agit d'un cryptage suffisant où le but est simplement de modifier tout texte clair envoyé sur un fil, par exemple.
Dominic Cerisano
6
@DominicCerisano: Non, l'encodage base64 ne compte pas comme un cryptage, et j'espère que vous ne l'utilisez pas pour protéger quoi que ce soit.
Ry-
19

Dans le langage courant, un «code» est quelque chose de secret. En science et en ingénierie, un code est simplement un accord, un ensemble de règles, sur la façon d'écrire quelque chose.

Ce code peut être secret. Dans ce cas, cela s'appelle un cryptage. Mais en général, un code n'est pas secret. Prenez le code génétique. Il indique simplement que notre ADN est construit à partir de quatre bases différentes -  A, C, Get Tet que trois bases pris ensemble forment un acide aminé. Il y a aussi un tableau dont trois lettres forment quel acide aminé.

Il n'y a rien de secret dans ce code.

De même, Base64 n'est pas un code secret. C'est plutôt un code qui permet de stocker des données sur six bits par caractère (il y a donc 64 entités différentes, c'est-à-dire que la «base» du système est 64, tout comme la base de notre système décimal est 10, puisqu'il y a 10 entités différentes appelé «chiffres»).

Konrad Rudolph
la source
17

L'encodage en base 64 fait partie des spécifications MIME. Il fournit un codage sûr pour le transport pour les données qui ne seront pas mâchées si / quand elles sont relayées via un hôte qui utilise un schéma de codage différent de celui utilisé par le client d'origine.

Il y a beaucoup d'hôtes différents sur les intertubes et vous ne pouvez pas vraiment supposer le support pour autre chose que l'ASCII 7 bits, sans risquer la perte / confusion de données.

Les mainframes IBM, par exemple, utilisent un encodage appelé EBCDIC (qui se décline en de nombreuses variantes). Ses points de code sont complètement différents des points de code utilisés par les puters basés sur ASCII - en ASCII, les lettres AZ sont 0x41 - 0x5A; dans EBCDIC, les lettres A - Z ne sont même pas une plage contiguë: les lettres AI vivent à 0xC1 - 0xC9, les lettres JR vivent à 0xD1 - 0xD9 et les lettres SZ vivent à 0xE2 - 0xE9.

Nicolas Carey
la source
1

Par défaut, les paramètres de champ d'en-tête de message dans les messages HTTP (Hypertext Transfer Protocol) ne peuvent pas transporter de caractères en dehors du jeu de caractères ISO-8859-1.

Si le nom d'utilisateur et le mot de passe contiennent un jeu de caractères incompatible, HTTP ne pourra pas transporter ce texte. pour éviter cela, nous encodons le nom d'utilisateur et le mot de passe avec base64 pour nous assurer que nous envoyons des caractères compatibles HTTP sur HTTP. pour plus d'informations, consultez ce Basic_access_authentication

Varun
la source