2016-06-30 12 views
1

私は非常にclojureです。私はJavaの経験を持っていません&それはライブラリ関数です。私はjava.util.Base64/getUrlEncoderを使ってbase64で暗号化されたデータを返す関数をclojureに書きました。以下のように私のコードを見て:パディングなしで暗号化されたデータを取得する方法は?

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

出力も(最後ので2等号)パディングが含まれています。私は私の出力から詰め物を削除するしたい。 https://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html#withoutPadding--これは私の問題を解決するのに便利だと分かっていますが、私はwithoutPadding()関数をclojureで使用する方法を理解できません。私はこのようなものを試しました:

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

これは間違っています。誰も正確な解決策を教えてくれますか?ありがとう。

+0

のBase64出力倍数、それがどのようにBase64で作品です。 "="文字を削除することは可能であり、ソーン・デコーダはそれを受け入れるかもしれないが、大部分ではない。 Base64の長さに基づいてデコードする前に復元して削除することもできますが、これはお勧めしません。ちょうどパディングを残して、それは一般的な習慣です。 – zaph

+0

をクリアすると、base64は暗号化方式ではなく、エンコード – noisesmith

答えて

4

あなたはエンコーダ自体にwithoutPaddingを呼び出す必要があります:入力、出力が「=」文字で埋められていることを必要としない場合は、4バイトの

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" 
関連する問題