您可以借助内置的 crypto.subtle 工具(自 2021 年年中起可用)创建 HMAC-SHA256 哈希,如下所示:
import { encode } from "https://deno.land/std/encoding/base64.ts"
const message = "hello world\nhello deno"
const encoder = new TextEncoder()
const keyBuf = encoder.encode("passw@rd");
const key = await crypto.subtle.importKey(
"raw",
keyBuf,
{name: "HMAC", hash: "SHA-256"},
true,
["sign", "verify"],
)
const data = encoder.encode(message);
const result = await crypto.subtle.sign("HMAC", key , data.buffer);
console.log(encode(new Uint8Array(result)));
kqfsOD/HMHBRL9F1Si4Y/qo9PCw2csuwXIGZK/P1IWc=
在 Deno 中引入 crypto.suble 之前,有两种基于外部包的选择:
您可以使用God Crypto,但这需要一个额外的 Base64 模块:
import { hmac } from "https://deno.land/x/god_crypto@v1.4.10/mod.ts"
import * as base64 from "https://deno.land/x/base64@v0.2.1/mod.ts"
let secretKey = "passw@rd"
let message = "hello world\nhello deno"
const result: string = base64.fromUint8Array(hmac("sha256", secretKey, message))
console.log(result)
kqfsOD/HMHBRL9F1Si4Y/qo9PCw2csuwXIGZK/P1IWc=
或者您可以使用更方便的hmac 模块,它集成了“base64”、“utf8”和“hex”的输出编码:
import { hmac } from "https://deno.land/x/hmac@v2.0.1/mod.ts";
let secretKey = "passw@rd"
let message = "hello world\nhello deno"
const result = hmac("sha256", secretKey , message , "utf8", "base64");
console.log(result)
kqfsOD/HMHBRL9F1Si4Y/qo9PCw2csuwXIGZK/P1IWc=