2016-06-30 7 views
1

Ich bin sehr neu in Clojure. Ich habe keine Erfahrung mit Java & es ist Bibliotheksfunktionen. Ich habe eine Funktion in clojure geschrieben, die base64-verschlüsselte Daten mit java.util.Base64/getUrlEncoder zurückgibt. Mein Code wie folgt aussehen:Wie bekomme ich verschlüsselte Daten ohne Padding?

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

Der Ausgang Polsterung sowie (zwei Gleichheitszeichen zuletzt) enthalten. Ich möchte entfernen Polsterung von meiner Ausgabe. https://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html#withoutPadding-- Ich weiß, das ist nützlich, um mein Problem zu lösen, aber ich bin nicht in der Lage, herauszufinden, wie ohnePadding() Funktion in clojure zu verwenden. Ich habe so etwas versucht:

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

Aber das ist falsch. kann jemand genaue lösung sagen? Vielen Dank.

+0

Base64 Ausgaben ein Vielfaches von 4 Bytes, wenn der Eingang nicht erfordert, dass der Ausgang mit „=“ Zeichen aufgefüllt wird, ist, dass, wie Base64 Werke . Es ist möglich, die "=" - Zeichen zu entfernen und sone-Decoder akzeptieren das, aber nicht die meisten. Sie können vor dem Decodieren basierend auf der Base64-Länge wiederherstellen und löschen, dies wird jedoch nicht empfohlen. Lassen Sie einfach die Polsterung, das ist die übliche Praxis. – zaph

+0

um klar zu sein, Base64 ist keine Verschlüsselungsmethode, es ist eine Codierung – noisesmith

Antwort

4

Sie haben withoutPadding auf dem Encoder nennen sich:

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"