Базовая кодировка 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?
Обратите внимание, что конкретное приложение предназначено для заголовка с использованием базовой проверки подлинности.
Ответы
Ответ 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)