2010-02-01 1 views
2

J'utilise le navigateur du client pour envoyer une requête HTTP. Pour la génération de rapports, securityToken est soumis en tant que POST, car le téléchargement du même jeton doit être envoyé par le navigateur de l'utilisateur, cette fois en utilisant GET.Sérialisation sérielle des données pour la communication HTTP simple GET & POST

Quel codage recommanderiez-vous pour le securityToken qui représente réellement les données cryptées?

J'ai essayé BASE64 mais cela échoue parce que le standard peut inclure le caractère "+" qui est traduit en HTTP GET à '' (espace vide).

Ensuite, j'ai essayé l'encodage URL, mais cela échoue parce que pour HTTP POST des trucs tels que% 3d sont transmis sans traduction, mais lorsque le navigateur fait HTTP GET avec les données % 3d est converti en '='.

Quel codage recommanderiez-vous pour permettre une transmission en toute sécurité via HTTP POST & GET sans que les données soient mal interprétées?

L'environnement est Java, Tomcat.

Merci, Maxim.

Répondre

2

Chaîne hexagonale.

Apache commons-codec a une classe Hex qui fournit cette fonctionnalité.

Il ressemblera à ceci: http://youraddress.com/context/servlet?param=ac7432be432b21

+0

Je pensais à quelque chose de plus compact alors Hex, quelque chose comme: BigInteger bi = new BigInteger ("STR_GOES_HERE" .getBytes()); System.out.println (bi.toString (36)); qui va sortir une gamme de caractères a-z0-9, le seul problème est que je ne peux pas trouver une méthode appropriée pour le convertir en String, une idée? –

+0

la classe Hex a les méthodes 'encodeHex (..)' et 'decodeHex (..)' – Bozho

+0

Je suis désolé, je crois que je devrais mieux m'expliquer via un exemple: Encoder "HelloWorld" en base16 est "48656c6c6f576f726c64", encoder ceci en base37 est "1jo7hzvcp48urzvo"; C'est 20 caractères pour Hex, 16 caractères pour Base37 qui est la raison pour laquelle je cherche à utiliser cet encodage. Mon problème est que j'ai du mal à convertir "1jo7hzvcp48urzvo" en "HelloWorld". L'aide serait appréciée. –