JavaScript Base 64 Расшифровка двоичных данных не работает - PullRequest
2 голосов
/ 23 февраля 2012

У меня есть простой файл PHP, который загружает файл с моего сервера, base64 кодирует его и выводит его.

Затем у меня есть простая HTML-страница, которая использует jQuery для извлечения этого файла, base64, декодирует его и выполняет проверку контрольной суммы. Проверка контрольной суммы не работает.

Я заполнил md5 файл в PHP после его кодирования, и md5 заполнил его в javascript перед декодированием, и контрольные суммы совпадают (поэтому во время передачи ничего не пошло не так). Однако контрольные суммы предварительного кодирования и последующего декодирования НЕ совпадают.

Я использую webtoolkit.base64.js для декодирования в JavaScript. Файл представляет собой двоичный файл (архив ZIP).

Есть ли проблема с библиотекой декодирования или что-то еще, о чем я не знаю, что может вызвать эту проблему? Может ли быть проблема с библиотекой MD5, которую я использую (http://pajhome.org.uk/crypt/md5/md5.html)

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Резюме С вашей библиотекой MD5 все в порядке, ваша библиотека base64 повреждена.

И ваша библиотека JavaScript Base64, и библиотека MD5 работают неправильно.

  1. Я создал и подтвердил ZIPфайл 15097 байт.Сумма MD5: a9de6b8e5a9173140cb46d4b3b31b67c
  2. Я закодировал этот файл в base64: http://pastebin.com/2rfdTzYT (20132 байта).
  3. Проверьте длину файла base64 в pastebin, используя следующую командуФрагмент JavaScript:document.querySelector('.de1').textContent.replace(/\s/g,'').length;
  4. Base64-декодировать файл правильно , используя atob, и проверить размер:

    window.b64_str = document.querySelector('.de1').textContent.replace(/\s/g,'');
    console.log( atob(window.b64_str).length ); /* 15097 */
    
  5. Я проверил, что оба файла были в точности равны, используя Hexdump библиотеку JavaScript и команду xxd UNIX (доступно как EXE-файл для Windows ).

Используя ваш декодер Base64, я получаю строку размером 8094. Это не 15097! Во время моих тестов я обнаружил, что метод atob возвращал неправильные байты после определенных последовательностей байтов, включая возврат каретки.Я еще не нашел решение этой проблемы.

Ваша библиотека MD5 в порядке.

0 голосов
/ 28 февраля 2012

Возможно, я неправильно понимаю вопрос, но если я не буду, я столкнулся с чем-то подобным раньше. Используемая вами библиотека JavaScript не работает в двоичном формате. То, что кодирует php, будет набором из 1 и 0, но то, что выдает JavaScript, будет текстом. Если вам нужна двоичная строка, вам нужно преобразовать полученный текст в двоичный, тогда он должен совпадать с исходным файлом.

...