Comment coder et décoder une chaîne de caractères en Python pour une utilisation dans une URL?
J'ai une chaîne comme celle-ci:
String A: [ 12234_1_Hello'World_34433_22acb_4554344_accCC44 ]
Je voudrais crypter Une Chaîne pour être utilisé dans une URL propre. quelque chose comme ceci:
String B: [ cYdfkeYss4543423sdfHsaaZ ]
Est-il encoder API en python, Une Chaîne donnée, elle retourne la Chaîne B?
Est-il décoder API en python, la Chaîne B, elle renvoie Une Chaîne?
Veuillez noter que le chiffrement ("je tiens à chiffrer...") n'est pas de l'encodage ("Est-il un encoder API..."). Vous avez accepté une réponse qui utilise l'encodage base64. Ce n'est pas le cryptage, c'est à dire de ces données n'est pas sécurisé.
chiffrée de la chaîne de requête et d'une URL propre ne sont pas à la même préoccupation. Si quoi que ce soit, cryptés la chaîne de requête est, par nature, pas propre. Comme il est, la question est très mal formulée.
chiffrée de la chaîne de requête et d'une URL propre ne sont pas à la même préoccupation. Si quoi que ce soit, cryptés la chaîne de requête est, par nature, pas propre. Comme il est, la question est très mal formulée.
OriginalL'auteur un33k | 2009-05-17
Vous devez vous connecter pour publier un commentaire.
Une seule façon de faire de l'encodage/décodage est d'utiliser le package base64, pour un exemple:
Est-il à ce que vous recherchez? Votre cas particulier, vous bénéficiez de:
d'entrée: 12234_1_Hello'World_34433_22acb_4554344_accCC44
codé: MTIyMzRfMV9IZWxsbydXb3JsZF8zNDQzm18ymmfjyl80ntu0mzq0x2fjy0ndndq=
décodé: 12234_1_Hello'World_34433_22acb_4554344_accCC44
OriginalL'auteur Daniel Wedlund
remarque qu'il y a une énorme différence entre le codage et de cryptage.
si vous souhaitez envoyer des données sensibles, alors ne pas utiliser le codage mentionné ci-dessus 😉
OriginalL'auteur
Êtes-vous après le cryptage, la compression, ou tout simplement encodage? La chaîne peut être passé après encodage, mais ce ne sera pas le rendre plus petit comme dans votre exemple. La Compression peut réduire, mais vous auriez encore besoin de la fonction urlencode le résultat.
Avez-vous réellement besoin de cacher les données de la chaîne de l'observateur (par exemple, les données sensibles ne doivent pas être vus par quelqu'un de lire l'URL par-dessus votre épaule)?
Vous pourriez être en confondant le stockage des données avec le référencement. C'est, de la courte chaîne de caractères que vous voyez dans l'URL est en fait un IDENTIFIANT de session, et les données de références sont conservées sur le serveur. Je peux me tromper, je ne connais pas tout les détails à propos de ce site, mais il est assez commun.
OriginalL'auteur JimG
De faire vraiment court -> il suffit d'insérer une ligne dans la base de données. Magasin de quelque chose comme une liste de
(id auto_increment, url)
des n-uplets. Ensuite, vous pouvezbase64
encoder l'id d'obtenir une url du proxy". Décoder par le décodage de l'id et de la recherche de la bonne url dans la base de données. Ou si vous n'avez pas l'esprit de la identificateurs à la recherche séquentielle, il suffit d'utiliser les nombres.OriginalL'auteur viraptor
Vous êtes à la recherche pour chiffrer la chaîne ou l'encoder pour supprimer des caractères illégaux pour les url?
Si ce dernier, vous pouvez utiliser
urllib.citation
:OriginalL'auteur dF.
Le base64 module permet d'encodage et de décodage pour une chaîne de caractères vers et à partir de bases différentes, depuis le python 2.4.
En vous exemple, vous pouvez effectuer les opérations suivantes:
Pour API complète:
http://docs.python.org/library/base64.html
TypeError: 'str' does not support the buffer interface
Ma chaîne:
A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|Adj|Adm|Adv|Asst|Bart|Bldg|Brig|Bros|Capt|Cmdr|Col|Comdr|Con|Corp|Cpl|DR|Dr|Drs|Ens|Gen|Gov|Hon|Hr|Hosp|Insp|Lt|MM|MR|MRS|MS|Maj|Messrs|Mlle|Mme|Mr|Mrs|Ms|Msgr|Op|Ord|Pfc|Ph|Prof|Pvt|Rep|Reps|Res|Rev|Rt|Sen|Sens|Sfc|Sgt|Sr|St|Supt|Surg|v|vs|i.e|rev|e.g|No #NUMERIC_ONLY#|Nos|Art #NUMERIC_ONLY#|Nr|pp #NUMERIC_ONLY#|Jan|Feb|Mar|Apr|Jun|Jul|Aug|Sep|Oct|Nov|Dec
OriginalL'auteur Brian Ramsay
Il est difficile de réduire la taille d'une chaîne de caractères et de les préserver de l'arbitraire de contenu.
Vous avez pour limiter les données à quelque chose que vous pouvez utilement compresser.
Votre alternative est de faire ce qui suit.
Sauver "tous les arguments dans l'URL" dans une base de données en ligne.
Attribuer une clé GUID pour cette collection d'arguments.
De le proposer ensuite raccourcie clé GUID.
Supplémentaire par rapport à quoi? Si vous êtes à l'authentification des utilisateurs et la vérification de l'autorisation, vous avez des requêtes. Si votre modèle de données est autre chose qu'une simple table, il peut comporter plus d'une requête. Enregistrement de la "requête" dans la base de données sera relativement facile à gérer.
OriginalL'auteur S.Lott
Une autre méthode qui permettrait également de raccourcir la chaîne serait de calculer le md5/sha1 hash de la chaîne concaténée avec une graine si vous le désirez):
En théorie, vous devriez obtenir un ensemble de chaînes avec très peu de collisions et avec une longueur fixe. Le
hashlib
bibliothèque dispose d'une gamme de différentes fonctions de hachage, vous pouvez utiliser de cette manière, avec des sorties différentes tailles.Edit: Vous avez aussi dit que vous aviez besoin d'une réversibles de la chaîne, de sorte à ne pas travailler. Autant que je sache, cependant, de nombreuses plates-formes web qui utilisent les URLs "propres" comme vous semblez vouloir mettre en œuvre l'utilisation de fonctions de hachage pour calculer une URL raccourcie et ensuite stocker l'URL avec la page autres données afin de fournir la fonctionnalité de recherche inversée.
hashlib.sha1
réversible?OriginalL'auteur chradcliffe