web-dev-qa-db-fra.com

Plage de caractères valides pour un encodage base 64

Je suis intéressé par ce qui suit:
Existe-t-il une liste de caractères qui jamais se produirait dans le cadre d'une chaîne codée en base 64?
Par exemple *. Je ne sais pas si cela se produira ou non. Si l'entrée d'origine avait effectivement * dans le cadre de cela serait-il encodé différemment?

42
Jim

Voici ce que je pourrais trouver: RFC 4648

Il comprend cette table pratique:

                  Table 1: The Base 64 Alphabet

 Value Encoding  Value Encoding  Value Encoding  Value Encoding
     0 A            17 R            34 i            51 z
     1 B            18 S            35 j            52 0
     2 C            19 T            36 k            53 1
     3 D            20 U            37 l            54 2
     4 E            21 V            38 m            55 3
     5 F            22 W            39 n            56 4
     6 G            23 X            40 o            57 5
     7 H            24 Y            41 p            58 6
     8 I            25 Z            42 q            59 7
     9 J            26 a            43 r            60 8
    10 K            27 b            44 s            61 9
    11 L            28 c            45 t            62 +
    12 M            29 d            46 u            63 /
    13 N            30 e            47 v
    14 O            31 f            48 w         (pad) =
    15 P            32 g            49 x
    16 Q            33 h            50 y

Ainsi, une expression régulière qui correspond à tout caractère qui ne devrait jamais apparaître dans les encodages Base 64 serait:

[^A-Za-z0-9+/=]

Cependant, comme le souligne la réponse de kapeps, ce n'est que la recommandation. Des implémentations spécifiques peuvent choisir un ensemble différent de 64 caractères. (En fait, même le RFC lié contient une table alternative pour le codage sécurisé des URL et des noms de fichiers, qui remplace les caractères 62 et 63 par - et _ respectivement). Je suppose donc que cela dépend vraiment de l'implémentation qui a créé l'encodage.

84
Martin Ender

Vous êtes probablement en sécurité avec les autres réponses dans la plupart des situations, mais selon article Wikipedia sur Base64 il ne devrait pas y avoir de liste précise sur laquelle vous pouvez compter:

Le choix particulier du jeu de caractères sélectionné pour les 64 caractères requis pour la base varie selon les implémentations.

RFC 4648 mentionne d'autres alphabets, comme l'alphabet Base 64 "sûr pour les URL et les noms de fichiers" , où + et / sont remplacés par - et _.

Il y a un tableau des variantes Base64 qui utilise des caractères différents. Gardez à l'esprit qu'il existe des règles spécifiques à l'implémentation concernant les séparateurs de lignes, que vous pouvez trouver dans le même tableau. Certaines implémentations comme MIME permettent même (et ignorent) les caractères qui ne sont pas dans l'alphabet.

15
kapex

Base64 contient uniquement A–Z, a–z, 0–9, +, / et =. La liste des caractères à ne pas utiliser est donc: tous les caractères possibles moins ceux mentionnés ci-dessus.

À des fins spéciales . et _ sont également possibles.

9
jlordo

https://en.wikipedia.org/wiki/Base64#Design

L'implémentation Base64 de MIME utilise A – Z, a – z et 0–9 pour les 62 premières valeurs

Donc, pour la plupart, vous ne devez vous attendre qu'à des caractères alphanumériques. Le tableau d'exemple de cet article affiche également "+" et "-"; il est peu probable que vous voyiez "*".

Vous pouvez utiliser http://www.motobit.com/util/base64-decoder-encoder.asp pour convertir en Base64 par exemple, et pour '*' cela renvoie "Kg =="

2
robert