置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Help:Hash-wasm库

猛汉♂百科,万男皆可猛的百科全书!转载请标注来源页面的网页链接,并声明引自猛汉百科。内容不可商用。
跳到导航 跳到搜索
Circle-icons-tools-light blue.svg
这个页面“Help:Hash-wasm库”是萌娘百科的公共代码库说明文档
  • 本文是面向技术用户组的用于其他代码的代码库的说明,并不能被普通读者和用户直接使用;
  • 本文仅是一篇帮助文档,若有任何疑问,请至萌娘百科_talk:讨论版/技术实现提问。

本代码库用以提供常见的 Hash 算法,引自hash-wasm,萌百采用的是4.9.0版本。

萌百采用的算法

为缩小代码长度,萌百仅采用以下算法:

算法类型 算法名称 备注
MD5 MD5 -
SHA-1 SHA1 -
SHA-2 SHA224SHA256SHA384SHA512 该算法的4种变体分别由4种方法实现
SHA-3 SHA3 该算法的4种变体由同一种方法实现,仅在该方法的参数中做区分
SM3 SM3 -

使用方法

首先应加载代码库:

await mw.loader.using("ext.gadget.libHashwasm");

此时你可以通过全局变量 hashwasm 来使用本代码库。每种算法名称对应两种方法:

快捷版本

快捷版本指的是直接获取数据的对应 Hash,方法名为算法名称的小写,方法为异步函数,以 SHA-3 为例:

await hashwasm.sha3("MoegirlPedia", 512); // 这里的 sha3 需要小写
// => "d220e77ace317abc0448cb710cd88489e7f86ffaa39700f62032f9be53e851c900d44b79e19d732d4c27bcadb5652c518dd8d948ee8f309aceeee5a43d9e9d19"

需要注意的是,SHA-2 的4种变种分别对应4个方法(hashwasm.sha224hashwasm.sha256hashwasm.sha384hashwasm.sha512),而 SHA-3 的变种通过 hashwasm.sha3 的第二个参数指定(第二个参数仅接受 224 | 256 | 384 | 512,512 为默认值)。

复杂版本

复杂版本需要自行构建对象,但可以提供更强大的控制功能。

使用方法与快捷版本类似,但不同的是方法名为create【算法名称全大写】,以 SHA-3 为例:

const hash = await hashwasm.createSHA3(512); // 注意这里的 SHA3 是大写
hash.init();
hash.update("MoegirlPedia"); // 添加数据,可多次添加,每次添加的数据之间没有间隔符
hash.digest("hex"); // 获取结果,可指定参数为 hex 以获取 16 进制数字,也可指定为 binary 以获取一个 Uint8Array
const state = hash.save(); // 保存当前状态(指当前已经添加的数据)为 Uint8Array【需在 digest 方法执行前】
hash.load(state); // 加载之前保存的状态
hash.blockSize // => 72
digestSize // => 64

需要注意的是,SHA-2 的4种变种分别对应4个方法(hashwasm.createSHA224hashwasm.createSHA256hashwasm.createSHA384hashwasm.createSHA512),而 SHA-3 的变种通过 hashwasm.createSHA3 的第一个参数指定(第一个参数仅接受 224 | 256 | 384 | 512,512 为默认值)。

兼容性

该代码库使用了WebAssembly.compileWebAssembly.instantiate,这在 Chrome 57 和 FireFox 52 以上版本可用。