JavaScript Base 64解码二进制数据不;t工作
JavaScript Base 64 Decoding Binary Data Doesn't Work
我有一个简单的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库都无法正常工作。
- 我已经创建并验证了一个15097字节的ZIP文件
MD5总和:a9de6b8e5a9173140cb46d4b3b31b67c
- 我已经对这个文件进行了base64编码:http://pastebin.com/2rfdTzYT(20132字节)
- 使用以下JavaScript片段验证pastebin中base64文件的长度:
document.querySelector('.de1').textContent.replace(/'s/g,'').length;
-
Base64使用
atob
正确解码文件,并验证大小:window.b64_str = document.querySelector('.de1').textContent.replace(/'s/g,''); console.log( atob(window.b64_str).length ); /* 15097 */
- 我使用
Hexdump
JavaScript库和xxd
UNIX命令(适用于Windows的EXE文件)验证了这两个文件完全相等
使用您的Base64解码器,我得到一个大小为8094的字符串那不是15097在测试过程中,我发现atob
方法在某些字节序列之后返回了不正确的字节,包括回车。我还没有找到解决这个问题的办法。
您的MD5库正常。
我可能误解了这个问题,但如果不是,我以前也遇到过这样的事情。您使用的javascript库不执行二进制操作。php编码的将是一堆1和0,但javascript吐出的将是文本。如果你想要一个二进制字符串,你必须将结果文本转换为二进制,那么它应该与你的原始文件相同。
相关文章:
- 数据属性仅在切换设备模式下工作
- OnsenUI AngularJS数据绑定无法正常工作
- 将数据输入到draggable无法工作
- 当单元格内容由于forumula从另一个工作表编译数据而更改时发送电子邮件
- 数据rel=“;背面“;无法在iPhone上工作
- Ember数据:如何;映射”;工作
- Ajax表单数据phpPOST不工作
- 我应该将哪些数据传递给 Spotify 应用程序才能使分页工作
- 数据表 + 列搜索 + 整体搜索协同工作 + 服务器端处理
- .split() 数据属性在应该工作的时候不起作用
- 与 Angular 1.5 的单向数据绑定类似于双向工作
- 数据表自动生成的序列号无法正常工作.对于每一页
- 数据表中的FixedHead没有'删除分页后无法工作
- 谷歌脚本-从网站论坛解析HTML-并将数据写入工作表
- 如何使用应用程序脚本执行API从谷歌工作表中提取数据
- 按钮上的数据加载消息无法与ajax调用一起工作
- Ember数据:DS.attr(“数字”)应该如何工作
- 使用ASP.Net MVC Web Api将JSON数据导出到Excel工作表
- 将数据传回父组件的ReactJS组件无法工作
- 数据插件选项筛选器不工作