繁体   English   中英

使用Scala或Java进行Base 64编码

[英]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.DecoderBase64.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.

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