У нас есть устаревший API-интерфейс NodeJS, с которого мы стремимся уйти. Мы извлекаем из него аут-компонент.Шифрование и двоичное кодирование NodeJS по умолчанию
У нас есть функция, которая хэширует пароль, который выглядит немного как:
var sha256 = crypto.createHash('sha256');
sha256.update(password + secret);
return sha256.digest('hex');
Помимо очевидных последствий безопасности функции, как это, это закодированные с помощью двоичного кодирования NodeJS имеет.
Если вы передадите строку для обновления, она будет использовать 'binary'
в качестве формата кодирования. Это приводит к тому, что он фактически кодирует символы Unicode, такие как «Kiełbasa
», как «KieBbasa
», перед тем, как SHA256 «их».
В нашем коде Scala мы теперь переписываем эту устаревшую функцию, чтобы мы могли использовать старых пользователей. Но мы не можем найти кодировку для использования в этих строках, которая имеет тот же результат. Наш код Scala выглядит следующим образом:
def encryptPassword(password: String): String = {
Hashing.sha256().hashString(in, Charsets.UTF_8).toString
}
Нам нужно in
строку, чтобы быть таким же, как то, что использует узел, но мы не можем понять это.
Идеи? Node.js ... даже не один раз.
ли вы что '' 'Hashing.sha256()' '' самостоятельно или это часть библиотеки? Если есть что-то вроде метода '' '' hashBytes (in: Array [Byte]) '' ', я думаю, вы могли бы сделать что-то вроде' '' Hashing.sha256(). HashBytes (password.getBytes) .toString''', чтобы вы можете сделать один-к-одному порт исходной функции Node.js. Будет ли это работать для вас? – stefanobaghino
Хешинг является частью Гуавы. Я пробовал код, который вы предлагали, но это не хорошо. Выходные байты не совпадают. Они делаются в случаях, когда нет символов Unicode –
Хорошо, я попытался немного поэкспериментировать с кодировками, а '' 'ł''' переводится в' '' '' '' 'при форсировании его кодировки' '' 'UTF-16LE '' ', а затем вернуться к' '' UTF-8'''. Ты это пробовал? – stefanobaghino