js跟java计算mad5不一致

今天碰到一个比较棘手的问题,经理要求上传文件同时上传文件的信息,信息包含文件的md5,后台会做文件完整性校验等,我用的跟以前一样的md5.js直接把在fileReader.onload中获取的文件流进行md5操作(代码如下),

$("#file1").change(function() {

var file = document.getElementById("file1").files[0];

var fileReader = new FileReader();

fileReader.readAsBinaryString(file);

fileReader.onload = function(e) {

console.log(md5(e.target.result)))

}

})

上传后报错,拿到后台生成的md5值进行比对发现跟我生成的不一样,网上找了N久最后发现是因为在js中是利用UTF-16编码的,而大多数计算md5值的方案都是基于二进制流的, 所以需要将js读出来的二进制流(已经被转换成UTF-16编码)还原成二进制流。最后的解决办法用的google的加密文件CryptoJS还原后再加密,下载地址:https://github.com/brix/crypto-js。下载后有N个文件,只需要以下两个文件就可以了。

上面代码改成

$("#file1").change(function() {

var file = document.getElementById("file1").files[0];

var fileReader = new FileReader();

fileReader.readAsBinaryString(file);

fileReader.onload = function(e) {

console.log(CryptoJS.MD5(CryptoJS.enc.Latin1.parse(e.target.result)))

//CryptoJS.enc.Latin1.parse(text)此方法是把文件还原成二进制流

}

})

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,332评论 1 10
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,960评论 18 399
  • 不支持上传文件,所以就复制过来了。作者信息什么的都没删。对前端基本属于一窍不通,所以没有任何修改,反正用着没问题就...
    全栈在路上阅读 2,076评论 0 2
  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 5,700评论 0 7
  • 虚假背后的繁荣, 苦乐背后的真实 从今往后, 我想拉着世界走
    光暗间的舞者阅读 264评论 2 2

友情链接更多精彩内容