使用說明:Hash-wasm庫
跳至導覽
跳至搜尋
這個頁面「Help:Hash-wasm庫」是萌娘百科的公共代碼庫說明文檔
- 本文是面向技術用戶組的用於其他代碼的代碼庫的說明,並不能被普通讀者和用戶直接使用;
- 本文僅是一篇幫助文檔,若有任何疑問,請至萌娘百科_talk:討論版/技術實現提問。
本代碼庫用以提供常見的 Hash 算法,引自hash-wasm,萌百採用的是4.9.0
版本。
萌百採用的算法
為縮小代碼長度,萌百僅採用以下算法:
算法類型 | 算法名稱 | 備註 |
---|---|---|
MD5 | MD5 |
- |
SHA-1 | SHA1 |
- |
SHA-2 | SHA224 、SHA256 、SHA384 、SHA512 |
該算法的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.sha224
、hashwasm.sha256
、hashwasm.sha384
、hashwasm.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.createSHA224
、hashwasm.createSHA256
、hashwasm.createSHA384
、hashwasm.createSHA512
),而 SHA-3 的變種通過 hashwasm.createSHA3
的第一個參數指定(第一個參數僅接受 224 | 256 | 384 | 512
,512 為默認值)。
兼容性
該代碼庫使用了WebAssembly.compile
和WebAssembly.instantiate
,這在 Chrome 57 和 FireFox 52 以上版本可用。