JavaScript Base 64解码二进制数据不起作用

时间:2012-02-23 16:31:55

标签: javascript binary base64

我有一个简单的PHP文件,它从我的服务器加载一个文件,base64对它进行编码并回显它。

然后我有一个简单的HTML页面,使用jQuery获取此文件,base64解码它并进行校验和测试。校验和测试不起作用。

我在编码后用PHP编写了文件,并在解码之前用jd5对它进行了调整,校验和匹配(因此在传输过程中没有出错)。但是,预编码和后解码校验和不匹配。

我正在使用webtoolkit.base64.js在JavaScript中对其进行解码。该文件是二进制文件(ZIP存档)。

解码库或其他我不知道可能导致此问题的其他问题?这可能是我正在使用的MD5库(http://pajhome.org.uk/crypt/md5/md5.html

的问题

2 个答案:

答案 0 :(得分:2)

  

<强>摘要
  您的MD5库没问题,您的base64库已损坏。

您的JavaScript Base64库和MD5库都无法正常工作。

  1. 我创建并验证了15097字节的ZIP文件 MD5总和:a9de6b8e5a9173140cb46d4b3b31b67c
  2. 我有base64编码此文件:http://pastebin.com/2rfdTzYT(20132字节)。
  3. 使用以下JavaScript代码段验证pastebin上base64文件的长度:
    document.querySelector('.de1').textContent.replace(/\s/g,'').length;
  4. 使用atob对文件正确进行Base64解码,并验证尺寸:

    window.b64_str = document.querySelector('.de1').textContent.replace(/\s/g,'');
    console.log( atob(window.b64_str).length ); /* 15097 */
    
  5. 我使用Hexdump JavaScript libraryxxd UNIX命令(EXE file for Windows提供)验证了两个文件完全相同。
  6. 使用Base64解码器,我得到一个大小为8094的字符串。这不是15097! 在我的测试中,我发现atob方法在某些字节序列之后返回了不正确的字节,包括回车。我还没有找到解决方案。

    您的MD5库没问题。

答案 1 :(得分:0)

我可能误解了这个问题,但如果我不是我之前遇到过这样的问题。你正在使用的javascript库不做二进制文件。 php编码的将是一堆1和0,但javascript吐出的将是文本。如果你想要一个二进制字符串,你必须将结果文本转换为二进制,然后它应该与原始文件相同。