gpt4 book ai didi

typescript - 如何在 deno 中使用 HmacSHA256 创建哈希?

转载 作者:行者123 更新时间:2023-12-05 02:02:22 26 4
gpt4 key购买 nike

我知道如何在 Python 中做到这一点。

#!/usr/bin/python
import sys
import os
import hashlib
import hmac
import base64

secretKey = bytes("passw@rd", 'UTF-8')
message = bytes(f'hello world\nhello deno', 'UTF-8')
encryptedKey = base64.b64encode(hmac.new(secretKey, message, digestmod=hashlib.sha256).digest())
print(encryptedKey)

code output

但我不知道如何在 deno 中做到这一点。我希望在 deno 中得到与上述 python 代码相同的结果。

最佳答案

您可以借助内置的 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.subtle 之前,有两种基于外部包的选择:

您可以使用 God Crypto为此,但这需要一个额外的 Base64 模块。重要提示:God Crypto 所有者已停止维护该包,因此不建议再使用。

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=

关于typescript - 如何在 deno 中使用 HmacSHA256 创建哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65805172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com