web-dev-qa-db-fra.com

Conversion d'un tableau d'octets en base64 et inversement

J'essaie de:

  1. Générez un tableau d'octets.
  2. Convertissez ce tableau d'octets en base64
  3. Convertissez cette chaîne base64 en un tableau d'octets.

J'ai essayé quelques solutions, par exemple celles de ce question .

Pour une raison quelconque, les tableaux d'octets initial et final ne correspondent pas. Voici le code utilisé:

using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
    {
         byte[] originalArray = new byte[32];
         rng.GetBytes(key);
         string temp_inBase64 = Convert.ToBase64String(originalArray);
         byte[] temp_backToBytes = Encoding.UTF8.GetBytes(temp_inBase64);
    }

Mes questions sont:

  1. Pourquoi "originalArray" et "temp_backToBytes" ne correspondent-ils pas? (originalArray a une longueur de 32, temp_backToBytes a une longueur de 44, mais leurs valeurs sont également différentes)

  2. Est-il possible de convertir dans les deux sens, et si oui, comment puis-je y parvenir?

34
crawfish

La raison pour laquelle le tableau codé est plus long d'environ un quart est que le codage en base 64 n'utilise que six bits sur chaque octet; c'est sa raison d'être - pour coder des données arbitraires, éventuellement avec des zéros et d'autres caractères non imprimables, d'une manière adaptée à l'échange via des canaux ASCII uniquement, tels que le courrier électronique.

La façon dont vous récupérez votre tableau d'origine est en utilisant Convert.FromBase64String:

 byte[] temp_backToBytes = Convert.FromBase64String(temp_inBase64);
43
dasblinkenlight