Что не так с кодировкой?

Есть вот такая библиотека для js (Blowfish - ECB), шифрую строчку 1234, ключ 11, получил результат. Беру небольшой класс для C++ (Blowfish - ECB), шифрую тоже самое, результат должен быть тот же но он отличается. В js библиотеке после шифровки строка кодируется в base64, выключаю кодирование - результат все равно разный, в чем причина ? я предполагаю что дело в кодировке или все же нет? Тогда в чем?
  • Вопрос задан
  • 267 просмотров
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
В js строки в памяти хранятся в кодировке UTF16-LE (2-4 байта на символ, в большинстве случаев 2) и библиотека работает с байтами строки именно в ней
Библиотека на C++ принимает на вход std::vector при простом преобразовании строки в который Вы получите вектор байтов в текущей кодировке пользователя, скорее всего однобайтовой
Кодируйте строку на C++ в UTF16-LE перед шифрованием - тогда получите одинаковый результат
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Библиотеки добавляют разные окончания, если строка не кратна восьми символам.
В JS:
if (block.length < 8) {
        var count = 8 - block.length;
        while (0 < count--) {
          block += "\0";
}

В C++:
size_t padding_length = dst.size() % sizeof(uint64_t);
  if (padding_length == 0) {
    padding_length = sizeof(uint64_t);
  } else {
    padding_length = sizeof(uint64_t) - padding_length;
  }

  for (size_t i = 0; i < padding_length; ++i) {
    dst.push_back(static_cast<char>(padding_length));
  }

Не хотите менять код библиотек - сами дополняйте строки до длины, кратной восьми.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы