6
votes

Quels sont les remplaçants de caractères doivent être effectués pour rendre la base de l'URL de codage de base 64?

En regardant l'URL Safe Base 64 Encodage, j'ai trouvé qu'il s'agissait d'une chose très standard. Malgré le nombre copieux de fonctions intégrées que PHP a, il n'y en a pas pour le codage 64 de la base de la sécurité URL. Sur la page manuelle de BASE64_ENCODE () CODE> , la plupart des commentaires suggèrent d'utiliser Cette fonction, enveloppée avec str .org / ~ kazuho / mime-base64-urlsafe-0.01 / lib / mime / base64 / urlsafe.pm "rel =" nofollow noreferrer "> mime :: base64 :: urlsafe ( Source ), qui effectue le remplacement suivant en interne : p> xxx pré>

Contrairement à la fonction PHP ci-dessus, cette version PERL tombe le caractère "=" (égal) caractère entièrement, plutôt que de le remplacer par "," (virgule) comme PHP . Equals est un caractère de rembourrage, de sorte que le module Perl les remplace comme si nécessaire lors du décodage, mais cette différence rend les deux implémentations incompatibles. P>

Enfin, la fonction Python urlsafe_b64encode garde le remplissage" = ", invitant quelqu'un à mettre en place Cette fonction Pour supprimer le remplissage qui montre en évidence dans Google Resultats pour 'Python Base64 URL Safe' : P>

from base64 import urlsafe_b64encode, urlsafe_b64decode

def uri_b64encode(s):
    return urlsafe_b64encode(s).strip('=')

def uri_b64decode(s):
    return urlsafe_b64decode(s + '=' * (4 - len(s) % 4))


0 commentaires

5 Réponses :


0
votes

Pourquoi n'essayez-vous pas d'envelopper dans un urlencode () ? Documentation ici.


1 commentaires

Qui utilise un nombre inutile de caractères. Pourquoi pas seulement l'urlencode la chaîne binaire en premier lieu?



2
votes

Je suggérerais d'exécuter la sortie de base64_encode via Urlencode. Par exemple: xxx


0 commentaires

1
votes

Si vous posez des questions correctes, j'irais avec un codage d'URL approprié par opposition au remplacement arbitraire de caractères. Premier base64-codez vos données, puis encoder en outre des caractères spéciaux tels que "=" avec un codage URL approprié (I.e. % ).


1 commentaires

Je suis en train d'utiliser les fonctions déjà disponibles, mais utilisez UrlenCode () peut ajouter beaucoup de longueur supplémentaire.



9
votes

Il semble que ce soit une norme, c'est RFC 3548 , section 4, BASE 64 Encodage avec URL et nom de fichier Alphabet Safe :

Ce codage est techniquement identique au précédent, sauf pour le 62: ND et 63: Caractère d'alphabet RD, comme indiqué dans le tableau 2.

+ et / doit être remplacé par - (moins) et _ (sous-cours) respectivement. Toutes les bibliothèques incompatibles doivent être enveloppées afin qu'elles soient conformes à la RFC 3548.

Notez que cela nécessite que votre URL encoder le fichier (pad) = caractères, mais je préfère que sur l'URL codant pour le codage de + et / caractères de l'alphabet Standard Base64.


0 commentaires

8
votes

Je ne pense pas qu'il y ait bien ou faux. Mais le codage le plus populaire est

'+/=' => '-_.'


1 commentaires

+1 pour mentionner Y64 et ajouter une certaine culture à la question