如何在 TypeScript/JavaScript 项目里引入 MD5 校验和
本文分享自华为云社区《TypeScript/JavaScript项目里如何做MD5校验和?》,作者: gentle_zhou。
什么是 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 之后内容的格式:
更复杂点的用法:
Hash 一个文件(注意:我们得确认 ts-md5/dist/md5_worker.js 文件是在 build 里面可用的,那么我们在需要的时候可以直接使用。这个文件存在的形式需要一直保持为单独的状态):
另一个 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 值的校验。
参考链接
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/e54bf8b50894d70cdee203df1】。文章转载请联系作者。
评论