2016-06-30 2 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==" 

:처럼 내 코드 모양. 내가 원하는 내 출력에서 ​​패딩을 제거. 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"