我有一个简单的PHP文件,它从我的服务器加载一个文件,base64对它进行编码并回显它。
然后我有一个简单的HTML页面,使用jQuery获取此文件,base64解码它并进行校验和测试。校验和测试不起作用。
我在编码后用PHP编写了文件,并在解码之前用jd5对它进行了调整,校验和匹配(因此在传输过程中没有出错)。但是,预编码和后解码校验和不匹配。
我正在使用webtoolkit.base64.js在JavaScript中对其进行解码。该文件是二进制文件(ZIP存档)。
解码库或其他我不知道可能导致此问题的其他问题?这可能是我正在使用的MD5库(http://pajhome.org.uk/crypt/md5/md5.html)
的问题答案 0 :(得分:2)
<强>摘要强>
您的MD5库没问题,您的base64库已损坏。
您的JavaScript Base64库和MD5库都无法正常工作。
a9de6b8e5a9173140cb46d4b3b31b67c
document.querySelector('.de1').textContent.replace(/\s/g,'').length;
使用atob
对文件正确进行Base64解码,并验证尺寸:
window.b64_str = document.querySelector('.de1').textContent.replace(/\s/g,'');
console.log( atob(window.b64_str).length ); /* 15097 */
Hexdump
JavaScript library和xxd
UNIX命令(EXE file for Windows提供)验证了两个文件完全相同。使用Base64解码器,我得到一个大小为8094的字符串。这不是15097!
在我的测试中,我发现atob
方法在某些字节序列之后返回了不正确的字节,包括回车。我还没有找到解决方案。
您的MD5库没问题。
答案 1 :(得分:0)
我可能误解了这个问题,但如果我不是我之前遇到过这样的问题。你正在使用的javascript库不做二进制文件。 php编码的将是一堆1和0,但javascript吐出的将是文本。如果你想要一个二进制字符串,你必须将结果文本转换为二进制,然后它应该与原始文件相同。