2016-06-30 1 views
1

Je suis très nouveau dans clojure. Je n'ai aucune expérience avec Java & c'est fonctions de la bibliothèque. J'ai écrit une fonction dans clojure qui renvoie des données cryptées base64 en utilisant java.util.Base64/getUrlEncoder. Mon apparence de code comme:Comment obtenir des données cryptées sans bourrage?

user> (import java.util.Base64) 
java.util.Base64 
user> (let [encoder (Base64/getUrlEncoder)] 
     (String. (.encode encoder (.getBytes "Hello StackOverflow")))) 
"SGVsbG8gU3RhY2tPdmVyZmxvdw==" 

La sortie contient un rembourrage aussi bien (deux signe égal enfin). Je veux enlever le remplissage de ma sortie. https://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html#withoutPadding-- Je sais que c'est utile pour résoudre mon problème, mais je ne suis pas en mesure de comprendre comment utiliser sansPadding() fonction dans clojure. J'ai essayé quelque chose comme ceci:

user> (let [encoder (Base64/getUrlEncoder))] 
     (doto (java.util.Base64/Encoder (.withoutPadding (String. (.encode encoder (.getBytes "Hello StackOverflow")))))) 

Mais c'est faux. quelqu'un peut-il dire la solution exacte? Merci.

+0

sorties BASE64 multiples de 4 octets, si l'entrée ne nécessite pas que la sortie est rembourré avec « = » caractères, ce qui est la façon dont fonctionne base64 . Il est possible de supprimer les caractères "=" et les décodeurs sone pourraient accepter cela mais pas le plus. Vous pouvez restaurer et supprimer avant le décodage en fonction de la longueur Base64, mais ce n'est pas recommandé. Il suffit de laisser le rembourrage, c'est la pratique courante. – zaph

+0

pour être clair, base64 n'est pas une méthode de cryptage, c'est un encodage – noisesmith

Répondre

4

Vous devez appeler withoutPadding sur le codeur lui-même:

user> (import java.util.Base64) 
java.util.Base64 
user> (let [encoder (Base64/getUrlEncoder)] 
     (String. (.encode encoder (.getBytes "Hello StackOverflow")))) 
"SGVsbG8gU3RhY2tPdmVyZmxvdw==" 
user> (let [encoder (.withoutPadding (Base64/getUrlEncoder))] 
     (String. (.encode encoder (.getBytes "Hello StackOverflow")))) 
"SGVsbG8gU3RhY2tPdmVyZmxvdw"