Éviter les sauts de ligne dans chiffré et chiffré chaîne d'URL
Je suis en train de mettre en œuvre une chaîne simple codeur à dissimule certaines parties d'une chaîne d'URL (pour les empêcher d'être sali par un utilisateur). Je suis en utilisant le code d'à peu près identique à l'échantillon de l' JCA guide, à l'exception de:
- à l'aide DES (en supposant que c'est un peu plus rapide que AES, et nécessite une clé plus petite) et
- Base64 fr/décodage de la chaîne pour s'assurer qu'elle reste en sécurité pour une URL.
Pour des raisons que je comprends pas, la chaîne de sortie se retrouve avec des retours à la ligne (qui je suppose ne fonctionne pas. Je ne peux pas comprendre ce qui cause cela. Des Suggestions sur quelque chose de semblable qui est plus facile ou des pointeurs vers des ressources d'autres à lire? Je suis à la recherche de tous les cryptographie références un peu au-dessus de ma tête (et overkill), mais une simple ROT13 mise en œuvre ne fonctionne pas comme je veux traiter un plus grand jeu de caractères (et ne veulent pas perdre de temps à mettre en place quelque chose susceptible d'avoir des problèmes avec d'obscurs personnages que je n'ai pas pensé).
D'entrée d'échantillon (pas de saut de ligne):
http://maps.google.com/maps?q=kansas&hl=en&sll=42.358431,-71.059773&sspn=0.415552,0.718918&hnear=Kansas&t=m&z=7
Exemple de Sortie (les sauts de ligne comme indiqué ci-dessous):
GstikIiULcJSGEU2NWNTpyucSWUFENptYk4m5lD8RJl8l1CuspiuXiE9a07fUEAGM/tC7h0Vzus+
jAH6cT4Wtz2RUlBdGf8WtQxVDKZVOzKwi84eQh2kZT9T3KomlnPOu2owJ/2RAEvG+QuGem5UGw==
mon coder extrait de:
final Key key = new SecretKeySpec(seed.getBytes(), "DES");
final Cipher c = Cipher.getInstance("DES");
c.init(Cipher.ENCRYPT_MODE, key);
final byte[] encVal = c.doFinal(s.getBytes());
return new BASE64Encoder().encode(encVal);
- avez-vous essayez juste de revenir de l'encodage de l'op et de voir si cela fonctionne ?
- où est-ce que BASE64Encoder classe viennent de?
- J'ai été importation de soleil.misc.BASE64Decoder, que j'ai trouvé grâce à ce post n'est pas une bonne idée.
- Pour référence, si vous souhaitez éviter de apache commons mise en œuvre, il y a un autre léger, open source, mise en œuvre dans le code source.biz/base64coder/java
Vous devez vous connecter pour publier un commentaire.
Base64 encodeurs généralement imposer une ligne maximum (morceau) de longueur, et ajoute des sauts de ligne lorsque cela est nécessaire. Vous pouvez normalement configurer, mais dépend du type de codeur mise en œuvre.
Par exemple, la classe de Apache Commons a un
linelength
attribut, la valeur zéro (ou négatif) désactive la ligne de séparation.BTW: je suis d'accord avec l'autre réponse que DES n'est guère souhaitable aujourd'hui. De plus, vous êtes juste "obscurcissement" ou vraiment le cryptage? Qui a la clé? La chose ne se sent pas très bien pour moi.
Il vous suffit d'effectuer
base64Str = base64Str.replaceAll("(?:\\r\\n|\\n\\r|\\n|\\r)", "")
sur la chaîne codée.
Cela fonctionne bien lorsque vous essayez de faire le décodage de ce retour à la octets. Je l'ai fait tester à plusieurs reprises avec de l'aléatoire généré des tableaux d'octets. Évidemment processus de décodage ignore juste les retours à la ligne, soit ils sont présents ou non.
J'ai testé cette "confirmé travailler" en utilisant
com.sun.org.apache.xml.internal.security.utils.Base64
D'autres encodeurs pas testé.
De coder extrait de l'AV...
remplacer :
avec :
de supprimer la ligne-sortir de notre résultat
Si elle n'a aucun rapport avec votre question réelle, DES est généralement plus lent que le cryptage AES (au moins dans les logiciels), de sorte que si vous vraiment besoin de garder la clé de la petite, AES est presque certainement un meilleur choix.
Deuxième, il est parfaitement normal que le chiffrement (DES ou AES) serait/sera de produire des caractères de nouvelle ligne à sa sortie. De la production sans eux seront tout à fait à la base-64 codeur, c'est de là qu'il est clair que vous devez regarder.
Il n'est pas particulièrement surprenant de voir un base-64 insérer des caractères de nouvelle ligne à intervalles réguliers, à sa sortie, cependant. L'utilisation la plus courante pour l'encodage base 64 est de mettre les données brutes en quelque chose comme le corps d'un email, d'où une très longue ligne pourrait poser problème. Pour éviter cela, les données sont brisées en morceaux, en général pas plus de 80 colonnes (et généralement un peu moins). Dans ce cas, les nouvelles lignes devraient être ignorées, cependant, de sorte que vous devriez être en mesure de simplement les supprimer, si ma mémoire est bonne.