【问题标题】:Base 64 encoding with Scala or Java使用 Scala 或 Java 进行 Base 64 编码
【发布时间】:2013-08-16 22:58:21
【问题描述】:

我试过了:

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 scala base64


【解决方案1】:

如果您使用的是scalaj(我是),您可以这样做:

import scalaj.http.Base64

Base64.encodeString(str)

或者

import scalaj.http.HttpConstants._

base64(str)

【讨论】:

    【解决方案2】:

    Scala 被问到:

    import java.nio.charset.StandardCharsets
    
    val (password, expected) = ("user:pass".getBytes(StandardCharsets.UTF_8), "dXNlcjpwYXNz")
    
    assume(java.util.Base64.getEncoder.encodeToString(password)==expected)
    

    【讨论】:

      【解决方案3】:

      从 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))
      

      【讨论】:

      • 什么是合适的 Java 7 替代品?
      【解决方案4】:

      要将“user:pass”转换为“dXNlcjpwYXNz”,您应该对 UTF-8 编码的字符串进行 base64 编码,而不是散列。

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

      System.out.println(BaseEncoding.base64()
          .encode("user:pass".getBytes(Charsets.UTF_8)));
      

      然后我出去

      dXNlcjpwYXNz
      

      根据要求。其他 Base64 编码器的工作方式应该类似。

      【讨论】:

      • (另外,您使用URLEncoder 的第二个版本似乎实际上并没有进行任何散列...或Base64 编码...)
      • 谢谢!那是完美的。至于第二个例子,它只是为了帮助排除一些其他类似问题的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2011-04-03
      • 2019-06-19
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      相关资源
      最近更新 更多