简体   繁体   English

如何获取加密数据而无需填充?

[英]How to get encrypted data without padding?

I'm very new in clojure. 我对Clojure非常陌生。 I don't have any experience with java & it's library functions. 我对Java及其库函数没有任何经验。 I wrote a function in clojure which return base64 encrypted data using java.util.Base64/getUrlEncoder. 我在clojure中编写了一个函数,该函数使用java.util.Base64 / getUrlEncoder返回base64加密的数据。 My code look like: 我的代码如下:

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

The output contain padding as well( two equal sign at last ). 输出也包含填充( 最后两个等号 )。 I want to remove padding from my output. 我想从输出中删除填充 https://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html#withoutPadding-- I know this is useful to solve my problem but I'm not able to figure out how to use withoutPadding() function in clojure. https://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html#withoutPadding-我知道这对于解决我的问题很有用,但我不知道如何解决在clojure中使用withoutPadding()函数。 I tried something like this: 我尝试过这样的事情:

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

But this is wrong. 但这是错误的。 can anyone tell exact solution? 谁能告诉确切的解决方案? Thanks. 谢谢。

You have to call withoutPadding on the Encoder itself: 您必须在编码器本身上调用withoutPadding

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"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM