JavaScript Base 64解码二进制数据不;t工作

JavaScript Base 64 Decoding Binary Data Doesn't Work

本文关键字:工作 数据 二进制 Base 解码 JavaScript      更新时间:2023-09-26

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

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

我在编码后用PHP对文件进行md5处理,在解码前用javascript对文件进行md5处理,校验和匹配(所以在传输过程中没有出现任何问题)。但是,预编码和解码后的校验和不匹配。

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

解码库是否有问题,或者我不知道的其他原因可能会导致此问题?我使用的MD5库可能有问题吗(http://pajhome.org.uk/crypt/md5/md5.html)

摘要
你的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. 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命令(适用于Windows的EXE文件)验证了这两个文件完全相等

使用您的Base64解码器,我得到一个大小为8094的字符串那不是15097在测试过程中,我发现atob方法在某些字节序列之后返回了不正确的字节,包括回车。我还没有找到解决这个问题的办法。

您的MD5库正常。

我可能误解了这个问题,但如果不是,我以前也遇到过这样的事情。您使用的javascript库不执行二进制操作。php编码的将是一堆1和0,但javascript吐出的将是文本。如果你想要一个二进制字符串,你必须将结果文本转换为二进制,那么它应该与你的原始文件相同。