摘要:MD5校验和则是其中一种数学算法,通常是使用工具对文件计算得出的一组32 个字符的十六进制字母和数字。

本文分享自华为云社区《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之后内容的格式:

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值的校验。

参考链接

  1. https://en.wikipedia.org/wiki/MD5)
  2. https://stackoverflow.com/questions/37299630/how-to-generate-md5-hash-in-angular-2-typescript/38506339
  3. http://www.semlinker.com/master-md5/
  4. https://www.npmjs.com/package/ts-md5
  5. https://www.npmjs.com/package/md5-file

点击关注,第一时间了解华为云新鲜技术~

如何在TypeScript/JavaScript项目里引入MD5校验和相关推荐

  1. 引入 javascript_在您JavaScript项目中引入类型安全性? 再想一想

    引入 javascript by James Wright 詹姆斯·赖特(James Wright) 在您JavaScript项目中引入类型安全性? 再想一想 (Introducing Type Sa ...

  2. 在前端项目里引入字体

    前言 最近做可视化看板产品经理觉得默认字体丑,那么只能在项目里引入一下字体了. 注: vue项目 项目里使用的是scss,对于css和less 没有进行测试 实现 分享一个下载ppt.字体的网址:第一 ...

  3. 【Vue】16.vue项目里引入百度统计

    参考官网:百度统计开放平台 百度统计 最近往项目里面引入百度统计,也是在网上查了各种资料,把百度统计的官网api又好好的看了一下,顺着文档的步骤,一步一步走下来,其实还蛮简单的,首先先在百度统计注册一 ...

  4. angular2+onsenui--怎么在angular2项目里引入onsenui框架

    在angular2项目里安装onsenui框架,这里使用npm命令. 一.在目录下,shift+鼠标右键–在此处打开命令窗口 键入命令:npm install onsenui ngx-onsenui ...

  5. Vue项目里引入Muse-UI

    一.在电脑中装好了node和vue的环境 二.下载纯净的Vue项目 1.在指定文件夹中输入指令:vue init webpack (自定义的项目名称): 2.然后根据提示,一路回车. 注意:Use E ...

  6. 前端项目,引入苹方字体

    UI用的IMac,设计图默认使用的字体为 pingFangSC-Regular 与UI协商后,决定在项目里引入本地的字体库 以达到与设计图同样的效果 首先下载font字体库 这里下载的是ttf文件(并 ...

  7. Webpack项目中引入IconFont图标

    本篇文章将介绍一下如何在Vue Webpack项目中引入IconFont图标. IconFont官网:https://www.iconfont.cn/ 1.打开IconFont官网并登陆自己的账户. ...

  8. 如何在Vue项目中引入ArcGIS JavaScript API​ 创建三维可视化地图(含vue项目创建教程)

    新手上路之在Vue项目中引入ArcGIS API​ 视频教程 B站搜索 X北辰北,感谢up主无私的教学~ B站地址:https://www.bilibili.com/video/BV18E411K7B ...

  9. jq的插件 vue中引用_详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件

    本篇文章主要介绍了详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件,具有一定的参考价值,有兴趣的可以了解一下 使用vue-cli构建的vue项目,webpack的配置文 ...

最新文章

  1. 四月青少年编程组队学习(图形化四级)Task01
  2. 牛顿第三定律不再起作用:芝加哥大学找到了一种新系统,作用力不等于反作用力...
  3. linux作业控制三个,10个linux 作业控制的bash 脚本实例
  4. Python基础教程(五):数字、字符串
  5. Junit测试JAVA文件,java – Junit测试模拟文件操作
  6. 【Kafka】Kafka Consumer 管理 Offset 原理
  7. ffmpeg.c(ffmpeg.exe)调试笔记一
  8. WIN32:API串口通讯实例教程
  9. 进阶篇:3.4.1)机械加工件-不同制造工艺详解和对应设备
  10. 自学JAVA-11:IO流
  11. You need to use a Theme.AppCompat theme (or descendant) with this activity
  12. java支付系统,三方支付系统,四方支付系统
  13. 在vue2.0下安装axios
  14. 怎样缩小图片大小kb?
  15. selenium定位到元素后获取其属性_selenium定位tr及td,并获取其文本及属性
  16. 如需定义元素内容与边框间的空间,可使用 padding 属性,并可使用负值?
  17. which语句c语言例子,用which引导的定语从句讲解和句子举例
  18. Linux:VNC桌面锁屏问题处理
  19. JAVA基础精选面试题(持续更新,一天五道,祝各位道友,早日飞升上仙)!
  20. 第三章 打造高性能的视频弹幕系统

热门文章

  1. moodle 用户 权限_用户和社区反馈如何驱动Moodle
  2. openstreetmap_OpenStreetMap参加奥运会,SourceForge改造等
  3. es6 Promise.prototype.then()方法
  4. SLAM GMapping(6)扫描匹配器
  5. 无碳小车 matlab,基于无碳小车前轮运动关系的MATLAB运动轨迹仿真.doc
  6. 计算机编程常用指令,加工中心几个常用指令的编程技巧
  7. php xml getattribute,PHP XMLReader getAttribute()用法及代码示例
  8. 运行orbslam2出现 段错误 (核心已转储)_JDK 14已发布快速预览16个新特性
  9. 为什么没有看到webcontent_环卫工人工资低工作辛苦,为什么还有那么多人愿意做呢?...
  10. 使用ie浏览器设置Domain无法使用session的问题解决办法