什么是 hashing?
hashing 是一种用于固定字符串长度的技术,在前端开发中经常用于构建缓存键、数据签名等需求。比如我们可以把一个长长的 url 地址通过 hashing 转成一个定长的字符串,作为本地缓存的键值,或者把一个传输的数据加上一个 hash 校验码,确保数据的完整性。
npm 包 hashing 介绍
npm 上有许多好用的 hashing 相关的包,比如 crypto-js, hash.js 等,今天我们主要介绍一个叫做 hasha
的 npm 包,它非常轻量,只有几十个 KB 的体积,同时支持多种 hashing 算法,包括 md5, sha256, sha512 等等。
以下是安装 hasha 的命令:
npm install hasha
如何使用 hasha?
hasha 支持两种常见的使用场景,一是对字符串进行 hash,二是对文件进行 hash。
对字符串进行 hash:
我们通过以下代码,对一个字符串 "hello world"
进行 md5 算法的 hashing:
const hasha = require('hasha'); const hash = hasha('hello world', { algorithm: 'md5' }); console.log(hash); // Output: 5eb63bbbe01eeed093cb22bb8f5acdc3
其中,algorithm
参数指定了使用的 hashing 算法,这里我们选择了 md5。
对文件进行 hash:
我们通过以下代码,对一个文件的内容进行 sha1 算法的 hashing:
-- -------------------- ---- ------- ----- ----- - ----------------- ----- -- - -------------- ----- ---- - ---------------- ----- -------- - -------------------- ------------ ----- ----------- - -------------------------- ----- ---- - ------------------ - ---------- ------ --- ------------------ -- ------- ----------------------------------------
其中,我们先通过 fs
模块读取了文件内容,然后直接将内容传给 hasha 函数进行 hashing。
多个文件进行批量 hash:
我们通过以下代码,对多个文件进行 sha1 算法的批量 hashing:
-- -------------------- ---- ------- ----- ----- - ----------------- ----- -- - -------------- ----- ---- - ---------------- ----- ------- - -------------------- --------- ----- --------- - ------------------------ ----- ------ - --- -------------------------- -- - ----- -------- - ------------------ ---------- ----- ----------- - -------------------------- ----- ---- - ------------------ - ---------- ------ --- ---------------- - ----- --- -------------------- -- ------- - ------------ ------------------------------------------- -- ------------ ------------------------------------------ -
我们通过遍历文件夹中的文件名,然后读取每个文件的内容,最后将每个文件的 hash 值保存在一个对象中返回。
示例说明
我们通过以上示例可以看到,使用 hasha 包进行 hashing 无比方便。我们可以在字符串和文件层面,以及批量 hash 多个文件层面,进行各种 hashing 算法的计算。
在前端开发中,hashing 技术有广泛的应用场景,比如缓存键、数据签名、网站静态资源版本控制以及防篡改等方面,这里我们只列举了一些最基本的示例,希望可以为你的开发提供一些启示和借鉴价值。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60056fd581e8991b448e7bc1