Подтвердить что ты не робот

Базовая кодировка 64 с помощью Scala или 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?

Обратите внимание, что конкретное приложение предназначено для заголовка с использованием базовой проверки подлинности.

4b9b3361

Ответ 1

Чтобы получить "user: pass" на "dXNlcjpwYXNz", вы должны кодировать кодировку UTF-8 в base64, но не хешировать.

Используя стороннюю библиотеку Guava, я могу запустить

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

и я выхожу

dXNlcjpwYXNz

по запросу. Другие кодеры Base64 должны работать аналогичным образом.

Ответ 2

Так как Java 8 есть полезные классы полезности непосредственно в стандартной библиотеке: Base64.Decoder и Base64.Encoder. Существуют также некоторые статические методы factory для создания экземпляров этих классов, которые выполняют кодировку/декодирование Base64 для различных вариантов Base64 в Base64 class.

Вот как использовать кодировщик:

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

Base64.getEncoder.encodeToString("user:pass".getBytes(StandardCharsets.UTF_8))

Ответ 3

Scala:

import java.nio.charset.StandardCharsets

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

assume(java.util.Base64.getEncoder.encodeToString(password)==expected)

Ответ 4

Если вы используете scalaj (я был), вы можете просто сделать это:

import scalaj.http.Base64

Base64.encodeString(str)

или

import scalaj.http.HttpConstants._

base64(str)