使用Scala或Java进行Base 64编码

Eri*_*one 34 java base64 scala

我试过了 :

val md = java.security.MessageDigest.getInstance("SHA-1")
val result = new sun.misc.BASE64Encoder().encode(md.digest("user:pass".getBytes))
Run Code Online (Sandbox Code Playgroud)

结果:

md: java.security.MessageDigest = SHA-1 Message Digest from SUN, <initialized>
result: String = smGaoVKd/cQkjm7b88GyorAUz20=
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

import java.net.URLEncoder
val result = URLEncoder.encode(user + ":" + pass, "UTF-8")
Run Code Online (Sandbox Code Playgroud)

结果:

result: String = user%3Apass
Run Code Online (Sandbox Code Playgroud)

基于http://www.base64encode.org/ 我想要的结果值应为"dXNlcjpwYXNz"

该网站与这些编码的不同之处是什么?另外,我如何模仿Java/Scala中的网站?

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

Vla*_*eev 73

从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))
Run Code Online (Sandbox Code Playgroud)


Lou*_*man 16

要将"user:pass"改为"dXNlcjpwYXNz",您应该对UTF-8编码的字符串进行base64编码,但不能进行散列.

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

System.out.println(BaseEncoding.base64()
    .encode("user:pass".getBytes(Charsets.UTF_8)));
Run Code Online (Sandbox Code Playgroud)

然后我出去了

dXNlcjpwYXNz
Run Code Online (Sandbox Code Playgroud)

按照要求.其他Base64编码器的工作方式应该相似.


Epi*_*ist 11

斯卡拉被问到:

import java.nio.charset.StandardCharsets

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

assume(java.util.Base64.getEncoder.encodeToString(password)==expected)
Run Code Online (Sandbox Code Playgroud)


dca*_*tro 7

如果你正在使用scalaj(我曾经),你可以这样做:

import scalaj.http.Base64

Base64.encodeString(str)
Run Code Online (Sandbox Code Playgroud)

要么

import scalaj.http.HttpConstants._

base64(str)
Run Code Online (Sandbox Code Playgroud)