JavaScript Base 64解码二进制数据不需要';行不通

JavaScript Base 64解码二进制数据不需要';行不通,javascript,binary,base64,Javascript,Binary,Base64,我有一个简单的PHP文件,它从我的服务器加载一个文件,base64对其进行编码并将其返回 然后我有一个简单的HTML页面,它使用jQuery获取这个文件,base64解码它并进行校验和测试。校验和测试不起作用 我在编码文件后用PHP对其进行md5处理,在解码之前用javascript对其进行md5处理,校验和匹配(因此在传输过程中没有出现任何错误)。但是,预编码和解码后校验和不匹配 我正在使用JavaScript对其进行解码。该文件是一个二进制文件(ZIP存档) 解码库是否存在问题或其他我不知道

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

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

我在编码文件后用PHP对其进行md5处理,在解码之前用javascript对其进行md5处理,校验和匹配(因此在传输过程中没有出现任何错误)。但是,预编码和解码后校验和不匹配

我正在使用JavaScript对其进行解码。该文件是一个二进制文件(ZIP存档)

解码库是否存在问题或其他我不知道的可能导致此问题的问题?我正在使用的MD5库可能有问题吗

摘要
MD5库正常,base64库已损坏

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

  • 我已经创建并验证了一个15097字节的ZIP文件。
    MD5总和:
    a9de6b8e5a9173140cb46d4b3b31b67c
  • 我已经对这个文件进行了base64编码:(20132字节)
  • 使用以下JavaScript片段验证pastebin处base64文件的长度:
    document.querySelector('.de1').textContent.replace(/\s/g').length
  • Base64使用正确解码文件,并验证大小:

    window.b64_str = document.querySelector('.de1').textContent.replace(/\s/g,'');
    console.log( atob(window.b64_str).length ); /* 15097 */
    
  • 我使用、和
    xxd
    UNIX命令(可从中获得)验证了这两个文件完全相等
  • 使用Base64解码器,我得到一个大小为8094的字符串这不是15097 在测试期间,我发现
    atob
    方法在某些字节序列(包括回车)之后返回了不正确的字节。我还没有找到解决办法


    您的MD5库没有问题。

    我可能误解了这个问题,但如果我没有误解,我以前也遇到过类似的情况。您正在使用的javascript库不执行二进制操作。php编码的将是一组1和0,但javascript输出的将是文本。如果您想要一个二进制字符串,您必须将结果文本转换为二进制,然后它应该与原始文件相同

    如果您尝试发送一个简单的文本文件,那么调试会更容易,并且不排除base64编码可能有故障。我已经用文本文件进行了这些测试,它工作正常(包括校验和部分)。我假设我使用的两个库中有一个不能很好地处理二进制数据。我在过去一天创建了一个自己的hextump库,并验证了
    atob
    实际上工作正常。您的库的md5sum算法似乎与UNIX/PHP中的不同。当我有更多的时间,我可能会更深入地挖掘它。