通过SparkMD5来进行文件MD5计算

您所在的位置:网站首页 js-md5 通过SparkMD5来进行文件MD5计算

通过SparkMD5来进行文件MD5计算

2023-03-27 09:00| 来源: 网络整理| 查看: 265

一、MD5计算将整个文件或者字符串,通过其不可逆的字符串变换计算,产生文件或字符串的MD5散列值。任意两个文件、字符串不会有相同的散列值(即“很大可能”是不一样的,理论上要创造出两个散列值相同的字符串是很困难的)。

二、因此MD5常用于校验字符串或者文件,以防止文件、字符串被“篡改”。因为如果文件、字符串的MD5散列值不一样,说明文件内容也是不一样的,即经过修改的,如果发现下载的文件和给的MD5值不一样,需要慎重使用。

三、MD5文件校验用途非常多,例如:游戏补丁包的校验,病毒文件确认,APP提审校验等;如果要确认某一个文件的完整性和正确性,都会使用MD5进行校验。

安装 npm i spark-md5 // 安装spark-md5 复制代码 全局引入spark-md5 import SparkMD5 from "spark-md5"; Vue.prototype.$SparkMD5 = SparkMD5 复制代码 或者在tool.js封装处理方法 import SparkMD5 from "spark-md5"; /** * @description: md加密 * @param {* * file:文件对象 * chunkSize:单位大小 * } * @return {*} */ const tool = { md5(file, chunkSize) { return new Promise((resolve, reject) => { let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice; let chunks = Math.ceil(file.size / chunkSize); let currentChunk = 0; let spark = new SparkMD5.ArrayBuffer(); //追加数组缓冲区。 let fileReader = new FileReader(); //读取文件 fileReader.onload = function(e) { spark.append(e.target.result); currentChunk++; if (currentChunk < chunks) { loadNext(); } else { let md5 = spark.end(); //完成md5的计算,返回十六进制结果。 resolve(md5); // console.log(md5); } }; fileReader.onerror = function(e) { reject(e); }; function loadNext() { let start = currentChunk * chunkSize; let end = start + chunkSize; if (end > file.size) { end = file.size; } fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); } loadNext(); }); } }; export default tool; 复制代码 调用: handleFileChange(e) { const [file] = e.target.files; if (!file) return; this.tool .md5(file, SIZE) .then(res => { // 获取到文件的md5 this.params.md5 = res; }) .catch(res => { // 处理异常 console.error(res); }); Object.assign(this.$data, this.$options.data()); // 还原初始data对象 this.container.file = file; }, 复制代码 后记: 切片上传的情况之下,有的需求是每一个切片md5值,有的情况下是整个文件的值 “d41d8cd98f00b204e9800998ecf8427e”指的是空字符串 spark.end()类似“剪切”,只能粘贴一次!也就是只能使用第一次,如果第二次使用的话就是传出空字符串SparkMD5的优势是啥? SparkMD5是MD5算法的快速md5实现。该脚本基于JKM md5库,该库是最快的算法。对JKM md5的改进像大多数服务器端算法一样,字符串被转换为utf8修正大量数据的计算(溢出)增量md5支持数组缓冲区(类型化数组)功能封装在闭包中,以避免全局分配面向对象的库CommonJS(可在节点中使用)和AMD集成通过JSHint和JSCS传递的代码增量md5对于散列大量数据(例如文件)的性能要好得多。可以使用FileReader&Blob读取成块的文件,并为md5哈希附加每个块,同时保持较低的内存使用率。请参见下面的示例。


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3