2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

說明: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 以上版本可用。