TypeScript与JavaScript项目里引入MD5校验和

作者:华为云开发者社区 时间:2024-05-28 15:40:03 

一、什么是MD5校验和?

MD5,是Message Digest Algorithm 5的缩写,即消息摘要算法版本5。

消息摘要算法通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。消息摘要算法也被称为哈希(Hash)算法或散列算法。任何消息经过散列函数处理后,都会获得唯一的散列值,这一过程称为 “消息摘要”,其散列值称为 “数字指纹”,其算法自然就是 “消息摘要算法”了。换句话说,如果其数字指纹一致,就说明其消息是一致的。

至于MD5校验和则是其中一种数学算法,通常是使用工具对文件计算得出的一组32 个字符的十六进制字母和数字(通过对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的 hash 值)。 这些数字是使用专用工具生成的,这些工具利用了“生成128 位(16 字节)哈希值的加密哈希函数”。

MD5校验和可以用于验证网络文件传输的完整性以及防止文件被人篡改。

TypeScript与JavaScript项目里引入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文件里依赖部分里):

TypeScript与JavaScript项目里引入MD5校验和

package.json文件里新添依赖:

TypeScript与JavaScript项目里引入MD5校验和

npm里关于ts-md5的介绍:

TypeScript与JavaScript项目里引入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求值。

TypeScript与JavaScript项目里引入MD5校验和

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

使用方法:

TypeScript与JavaScript项目里引入MD5校验和

注:

针对JS项目里的流式下载,并不仅仅是https.get(requestUrl)下载完之后,就真的下载完了;我们还需要对const stream = fs.createWriteStream(toolsPath);这个stream常量进行检测,看是否是finish状态了。

当https.get是end状态和stream是finish状态的时候,我们才可以说所有下载都完成了;此时才可以进行MD5值的校验。

来源:https://blog.51cto.com/u_15214399/5027998

标签:TypeScript,MD5,校验和,JavaScript
0
投稿

猜你喜欢

  • Python文件名的匹配之clob库

    2022-11-17 06:59:46
  • Python中使用wxPython开发的一个简易笔记本程序实例

    2021-09-07 22:06:22
  • jQuery实现用户注册的表单验证示例

    2024-04-10 10:36:12
  • function.inc.php超越php

    2024-06-05 09:22:40
  • Python GUI利用tkinter皮肤ttkbootstrap实现好看的窗口

    2022-09-06 19:39:26
  • JavaScript Event学习第四章 传统的事件注册模型

    2024-05-09 10:38:04
  • Python数字/字符串补零操作实例代码

    2021-07-13 03:16:57
  • python实现的接收邮件功能示例【基于网易POP3服务器】

    2022-08-24 20:34:41
  • Python 中Django验证码功能的实现代码

    2022-05-01 22:55:39
  • python打印n位数“水仙花数”(实例代码)

    2021-06-11 20:35:36
  • 40个你可能不知道的Python技巧附代码

    2021-09-26 13:56:58
  • Python实现在PyPI上发布自定义软件包的方法详解

    2021-12-07 17:05:02
  • python实现多线程暴力破解登陆路由器功能代码分享

    2023-08-28 21:27:01
  • 对“关于购物车的想法”的一些回复

    2009-03-10 18:15:00
  • Python实现的十进制小数与二进制小数相互转换功能

    2022-02-17 16:24:39
  • 详解如何在python中读写和存储matlab的数据文件(*.mat)

    2023-06-27 22:24:32
  • mysql高效导数据的方法讲解

    2024-01-28 08:42:50
  • Python pandas的八个生命周期总结

    2023-02-08 17:01:04
  • selenium3+python3环境搭建教程图解

    2022-09-04 14:47:16
  • python format 格式化输出方法

    2023-12-24 16:26:19
  • asp之家 网络编程 m.aspxhome.com