[英]Base 64 encoding with Scala or Java
我试过了 :
val md = java.security.MessageDigest.getInstance("SHA-1")
val result = new sun.misc.BASE64Encoder().encode(md.digest("user:pass".getBytes))
结果:
md: java.security.MessageDigest = SHA-1 Message Digest from SUN, <initialized>
result: String = smGaoVKd/cQkjm7b88GyorAUz20=
我也尝试过:
import java.net.URLEncoder
val result = URLEncoder.encode(user + ":" + pass, "UTF-8")
结果:
result: String = user%3Apass
基于http://www.base64encode.org/我想要的结果值应为“dXNlcjpwYXNz”
该网站与这些编码的不同之处是什么? 另外,我如何模仿Java / Scala中的网站?
请注意,特定应用程序用于使用基本身份验证的标头。
从Java 8开始,标准库中直接有一些方便的实用程序类: Base64.Decoder
和Base64.Encoder
。 还有一些静态工厂方法来构造这些类的实例,这些类对Base64
类中的各种类型的Base64执行Base64编码/解码。
这是如何使用编码器:
import java.util.Base64
import java.nio.charset.StandardCharsets
Base64.getEncoder.encodeToString("user:pass".getBytes(StandardCharsets.UTF_8))
要将“user:pass”改为“dXNlcjpwYXNz”,您应该对UTF-8编码的字符串进行base64编码,但不能进行散列。
使用第三方Guava库,我可以运行
System.out.println(BaseEncoding.base64()
.encode("user:pass".getBytes(Charsets.UTF_8)));
然后我出去了
dXNlcjpwYXNz
按照要求。 其他Base64编码器的工作方式应该相似。
斯卡拉被问到:
import java.nio.charset.StandardCharsets
val (password, expected) = ("user:pass".getBytes(StandardCharsets.UTF_8), "dXNlcjpwYXNz")
assume(java.util.Base64.getEncoder.encodeToString(password)==expected)
如果你正在使用scalaj (我曾经),你可以这样做:
import scalaj.http.Base64
Base64.encodeString(str)
要么
import scalaj.http.HttpConstants._
base64(str)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.