Peut une chaîne encodée en base64 contenir d'espaces?
Une chaîne encodée en base64 contenir d'espaces? Plus précisément, pourrait-il contenir d'espaces à la fin de la chaîne?
PS. Je suis en train de réfléchir à l'ensemble de la "MySQL garniture de fuite les espaces lors de stocker des chaînes de caractères dans les champs VARCHAR" ici 😉
- P'raps je veux dire "fait" plus que "peut" 😉
- eh bien, vous pouvez ajouter des espaces en fonction de la mise en œuvre, mais la plupart du temps ils tout simplement être supprimés car ils sont en fait valables parce qu'elles ne font pas partie de la b64 "alphabet", mais souvent inclus à des fins d'affichage, "readbility" ne marche pas en fait le frapper parce qu'un Humain normal cant lire b64 chaînes en premier lieu
Vous devez vous connecter pour publier un commentaire.
Non, elle peut pas. Voir Base64 pour le permis de caractère référentiel utilisé par
base64
, qui sont les personnagesA-Z
,a-z
,0-9
,+
et/
(les deux dernières peuvent différer en fonction de la mise en œuvre) ainsi que le rembourrage personnage=
(mais c'est aussi dépendant de l'implémentation que certaines implémentations ne pas utiliser de rembourrage à tous).base64
-encodées dans une base de données MySQLVARCHAR
colonne qui est absolument enregistrer.base64
string, puis elle le plus probablement le résultat de l'analyse d'URL de la conversion à partir d'un+
à un espace blanc. Un simple$str = str_replace(' ', '+', $str)
avant de vousbase64_decode($str)
va le résoudre.Il ne devrait pas, mais il pourrait faire.
Valide base64 chaîne ne doit pas contenir d'espaces étant donné que le codage de l'alphabet ne devrait consister en de A-Z a-z 0-9 + /
Toutefois, si les données encodées arrive à contenir le caractère'+', et les données sont transmises dans l'URL, il peut être involontairement converti en un espace. Donc, vous pouvez venir à travers un supposé base64 chaîne qui semble avoir des espaces dans ces circonstances.
Si c'est le cas, il suffit de remplacer les espaces par des points positifs avant de décodage.
Comme une part, la fuite des espaces de type varchar ne sera pas par hasard dépouillé de MySQL 5.0.3
Oui. Chaîne Base64 peut contenir des espaces vides, mais les personnages ne sont pas significatives. Donc c'est ok si la base de données garnitures espaces.
Comme une question de fait, le MIME spécification recommande à briser Base64 les chaînes en lignes de 72 caractères. base64Binary de XML peut également inclure des sauts de ligne, les tabulations, les espaces.
En PHP,
base64_decode()
bandes de toutes les whiltespace caractères de sorte que vous n'avez pas à vous inquiéter à ce sujet.Wikipedia suggère qu'il y a comme une foule de variations de l'encodage Base64:
http://en.wikipedia.org/wiki/Base64
Donc la réponse dépend probablement sur ce que vous devez faire avec la chaîne. Mais j'oserais dire que vous avez créé en PHP avec base64_encode() de sorte qu'il semble être sans danger pour ajouter des espaces vides:
Autant que je sache, il ne peut pas. Fondamentalement, un Base64 chaîne doit être construit à partir d'un ensemble de 64 caractères. A-Z, a-z, 0-9 faire 62 - les deux autres dépendent de la mise en œuvre.
Basé sur ce que je sais, il est maintenant de mise en œuvre qui va utiliser l'espace blanc comme un personnage. La raison principale en est que meilleure lisibilité - c'est à dire un Base64 chaîne doit être facilement imprimés et reconnu.
Vous auriez probablement trouver plus d'infos à ce sujet sur Wikipédia.
Non, mais - certaines implémentations de la
base64
utilitaire ajouter des retours à la ligne (à la sortie, ce qui peut faire apparaître comme si les espaces sont une partie de la sortie. Si vous êtes en cours d'exécution dans ce cas, selon la version de votrebase64
, vous pouvez désactiver ce comportement, ou de la bande caractères de saut de ligne, en effectuant l'une des opérations suivantes:Voir cette question pour plus de détails: https://superuser.com/questions/1225134/why-does-the-base64-of-a-string-contain-n/1225334