本文详解在 TypeScript 和 JavaScript 项目中引入 MD5 校验和的方法。涵盖 ts-md5 库的安装、字符串及并行哈希用法,以及 md5-file 库在文件流式下载完成后的完整性校验实现,确保数据传输安全。
一、什么是MD5校验和?
MD5,即Message Digest Algorithm 5(消息摘要算法版本5)。
消息摘要算法通过提取数据指纹来实现数据签名与完整性校验。由于其不可逆特性,有时也用于敏感信息加密。该算法亦称哈希(Hash)或散列算法。任何消息经散列函数处理后,均生成唯一的散列值,此过程称为“消息摘要”,生成的值称为“数字指纹”。若数字指纹一致,则表明原始消息一致。
MD5校验和是一种数学算法,通常利用工具对文件计算得出由32个字符组成的十六进制字符串(通过对任意长度信息逐位计算,生成二进制长度为128位、即十六进制32位的hash值)。这些数值由利用“生成128位(16字节)哈希值的加密哈希函数”的专用工具生成。
MD5校验和可用于验证网络文件传输的完整性,并防止文件被篡改。

二、MD5校验和的优点和漏洞
MD5 特点:
- 稳定、运算速度快。
- 压缩性:输入任意长度数据,输出长度固定(128 比特位)。
- 运算不可逆:已知运算结果的情况下,无法通过逆运算得到原始字符串。
- 高度离散:输入的微小变化,可导致运算结果差异巨大。
MD5 漏洞:
随着计算机技术发展和计算水平提高,MD5 算法暴露的漏洞日益增多。1996 年后被证实存在弱点,可被破解。对于需高度安全性的数据,专家建议改用其他算法(如 SHA-2)。2004 年证实 MD5 算法无法防止碰撞(collision),因此不适用于安全性认证,如 SSL 公开密钥认证或数字签名等用途。
但对于验证网络文件传输的完整性以及防止文件被人篡改的功能,还是绰绰有余的。
三、如何在TS项目里引入MD5校验和?
首先在项目终端(terminal)中,进入项目目录,输入命令 $npm install ts-md5 --save 进行下载(命令中的 --save 参数会帮助 npm 在下载 ts-md5 包时,将所有下载的核心包保存到 package.json 文件的依赖部分):

package.json文件里新添依赖:

npm里关于ts-md5的介绍:

然后在项目代码中需要用到md5的地方,引入MD5文件:
import {Md5} from 'ts-md5/dist/md5';四、MD5校验的使用
如何对字符串内容进行hash?有如下几种用法,=> 后面的是hash之后内容的格式:
Md5.hashStr('blah blah blah') => hex:string
Md5.hashStr('blah blah blah', true) => raw:Int32Array(4)
Md5.hashAsciiStr('blah blah blah') => hex:string
Md5.hashAsciiStr('blah blah blah', true) => raw:Int32Array(4)更复杂点的用法:
//先声明一个Md5对象
md5 = new Md5();
// 可以链式地加上需要去hash的内容
// 内容格式可以是:字符串,Ascii字符串,Blob(Binary Large Object)即二进制类型的大对象
md5.appendStr('somestring')
.appendAsciiStr('a different string')
.appendByteArray(blob);
// 生成MD5-16进制字符串,然后结束md5
md5.end();Hash一个文件(注意:我们得确认ts-md5/dist/md5_worker.js文件是在build里面可用的,那么我们在需要的时候可以直接使用。这个文件存在的形式需要一直保持为单独的状态):
import {ParallelHasher} from 'ts-md5/dist/parallel_hasher';
let hasher = new ParallelHasher('/path/to/ts-md5/dist/md5_worker.js');
hasher.hash(fileBlob).then(function(result) {
console.log('md5 of fileBlob is', result);
});五、另一个npm依赖包的使用方法
我们还可以使用另一个npm里的依赖包md5-file 专门对文件进行MD5求值。

使用方法,去项目的terminal框内,在项目目录底下,输入命令$npm install --save md5-file去下载。
使用方法:

注:
针对JS项目里的流式下载,并不仅仅是https.get(requestUrl)下载完之后,就真的下载完了;我们还需要对const stream = fs.createWriteStream(toolsPath);这个stream常量进行检测,看是否是finish状态了。
当https.get是end状态和stream是finish状态的时候,我们才可以说所有下载都完成了;此时才可以进行MD5值的校验。
到此这篇关于TypeScript与JavaScript项目里引入MD5校验和的文章就介绍到这了,更多相关TypeScript与JavaScript项目里引入MD5校验和内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!