使用Scala或Java进行Base 64编码

使用Scala或Java进行Base 64编码,java,scala,base64,Java,Scala,Base64,我试过: 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

我试过:

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=
result: String = user%3Apass
结果:

md: java.security.MessageDigest = SHA-1 Message Digest from SUN, <initialized>
result: String = smGaoVKd/cQkjm7b88GyorAUz20=
result: String = user%3Apass
基于 我想要的结果值应该是“dXNlcjpwYXNz”

网站与这些编码有什么不同? 另外,我如何在Java/Scala中模拟该站点

注意,特定应用程序用于使用基本身份验证的标头。

要将“用户:传递”获取到“dXNlcjpwYXNz”,您应该使用base64编码UTF-8编码字符串,而不是哈希

使用第三方Guava库,我可以运行

System.out.println(BaseEncoding.base64()
    .encode("user:pass".getBytes(Charsets.UTF_8)));
然后我就出去了

dXNlcjpwYXNz

按要求。其他Base64编码器的工作原理应该类似。

因为Java 8在标准库中直接提供了方便的实用程序类:和。还有一些静态工厂方法来构造这些类的实例,这些类对类中的各种Base64进行Base64编码/解码

以下是如何使用编码器:

import java.util.Base64
import java.nio.charset.StandardCharsets

Base64.getEncoder.encodeToString("user:pass".getBytes(StandardCharsets.UTF_8))
有人问斯卡拉:

import java.nio.charset.StandardCharsets

val (password, expected) = ("user:pass".getBytes(StandardCharsets.UTF_8), "dXNlcjpwYXNz")

assume(java.util.Base64.getEncoder.encodeToString(password)==expected)
如果您正在使用(我曾经),您可以简单地执行以下操作:

import scalaj.http.Base64

Base64.encodeString(str)


(另外,您使用
urlcoder
的第二个版本似乎没有实际执行任何哈希运算…或Base64编码…)谢谢!那太完美了。至于第二个例子,它只是为了帮助排除其他类似问题的一些答案。什么是合适的Java 7替代方案?如果你想自己制作,我有一些例子,我为scala制作了Base64