我有一个简单的PHP文件,它从我的服务器加载一个文件,base64对其进行编码并回显。
然后我有一个简单的超文本标记语言页面,它使用jQuery来获取这个文件,base64解码它,并做一个校验和测试。校验和测试不起作用。
我在编码后用PHP对文件进行了md5'd处理,在解码前用javascript对它进行了md5'd处理,校验和匹配(所以在传输过程中没有出现任何问题)。但是,编码前校验和解码后校验和不匹配。
我在JavaScript中使用webtoolkit.base64.js解码它。该文件为二进制文件( ZIP存档)。
有没有解码库的问题或其他我不知道的问题,可能会导致这个问题?我正在使用的MD5库(http://pajhome.org.uk/crypt/md5/md5.html)会有问题吗?
发布于 2012-02-28 07:22:35
摘要
你的MD5库没问题,你的base64库坏了。
您的JavaScript Base64库和MD5库都无法正常工作。
sum:a9de6b8e5a9173140cb46d4b3b31b67c
使用atob正确document.querySelector('.de1').textContent.replace(/\s/g,'').length;
window.b64_str = document.querySelector('.de1').textContent.replace(/\s/g,'');console.log( atob(window.b64_str).length );/* 15097 */
Hexdump JavaScript library和xxd UNIX命令(以UNIX的形式提供)验证这两个文件是否完全相同使用Base64解码器,我得到了一个大小为8094的字符串。不是15097!的在我的测试中,我发现atob方法在某些字节序列之后返回了不正确的字节,包括回车。我还没有找到解决这个问题的办法。
您的MD5库是正常的。
发布于 2012-02-28 07:36:27
我可能误解了这个问题,但如果我没有误解,我以前就遇到过这样的情况。您正在使用的javascript库不支持二进制。php编码的将是一堆1和0,但javascript输出的将是文本。如果你想要一个二进制字符串,你必须将生成的文本转换成二进制,然后它应该和你的原始文件一样。
https://stackoverflow.com/questions/9417105
复制相似问题