Skip to content Skip to sidebar Skip to footer

Javascript Base 64 Decoding Binary Data Doesn't Work

I have a simple PHP file which loads a file from my server, base64 encodes it and echoes it out. Then I have a simple HTML page that uses jQuery to fetch this file, base64 decode i

Solution 1:

Summary Your MD5 library is OK, your base64 library is broken.

Both your JavaScript Base64 library and MD5 library are not working correctly.

  1. I have created and verified a ZIP file of 15097 bytes. MD5 sum: a9de6b8e5a9173140cb46d4b3b31b67c
  2. I have base64-encoded this file: http://pastebin.com/2rfdTzYT (20132 bytes).
  3. Verify the length of the base64 file at pastebin, using the following JavaScript snippet: document.querySelector('.de1').textContent.replace(/\s/g,'').length;
  4. Base64-decode the file properly using atob, and verify the size:

    window.b64_str = document.querySelector('.de1').textContent.replace(/\s/g,'');
    console.log( atob(window.b64_str).length ); /* 15097 */
  5. I verified that both files were exactly equal using the Hexdump JavaScript library, and the xxd UNIX command (available as EXE file for Windows).

Using your Base64 decoder, I get a string with the size of 8094. That is not 15097! During my tests, I discovered that the atob method returned incorrect bytes after certain byte sequences, including carriage returns. I have not yet found a solution to this.

Your MD5 library is OK.

Solution 2:

I may be misunderstanding the question, but if I'm not I've run into something like this before. The javascript library you're using doesn't do binary. What php encodes is going to be a bunch of 1's and 0's but what the javascript spits out is going to be text. If you want a binary string you'll have to convert the resulting text to binary, then it should be the same as your original file.

Post a Comment for "Javascript Base 64 Decoding Binary Data Doesn't Work"