43

私が試してみました :

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 でサイトを模倣するにはどうすればよいですか?

特定のアプリケーションは、基本認証を使用するヘッダー用であることに注意してください。

4

4 に答える 4

90

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))
于 2014-08-19T05:59:03.710 に答える
11

Scala は次のように尋ねられました。

import java.nio.charset.StandardCharsets

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

assume(java.util.Base64.getEncoder.encodeToString(password)==expected)
于 2014-11-12T13:45:31.273 に答える
7

scalajを使用している場合(私はそうでした)、次のように簡単に実行できます。

import scalaj.http.Base64

Base64.encodeString(str)

または

import scalaj.http.HttpConstants._

base64(str)
于 2015-10-03T20:33:28.873 に答える