deno.com

哈希

在 Github 上编辑

哈希数据是一种常见操作,Deno 通过支持 Web Crypto API 来促进这种操作。此外,Deno 标准库的实现扩展了标准 API,允许更高级的用法。

在我们的第一个示例中,我们将哈希字符串变量的内容。
const message = "The easiest, most secure JavaScript runtime.";
在我们可以将消息传递给哈希函数之前,我们首先需要将其编码为 uint8 数组。
const messageBuffer = new TextEncoder().encode(message);
在这里,我们使用内置的 crypto.subtle.digest 方法来哈希我们的原始消息。哈希值以 ArrayBuffer 的形式返回。要获得字符串,我们需要做更多的工作。
const hashBuffer = await crypto.subtle.digest("SHA-256", messageBuffer);
我们可以使用标准库的 encodeHex 方法将其解码为字符串。
import { encodeHex } from "jsr:@std/encoding/hex";
const hash = encodeHex(hashBuffer);
console.log(hash);
在我们的第二个示例中,我们将哈希文件的内容。哈希文件是一种常见操作,在不将整个文件加载到内存中的情况下执行此操作是典型的要求。
标准库对 Web Crypto API 进行了扩展,这些扩展在执行哈希文件之类的操作时非常有用。这些可以通过“crypto”模块访问,它是 Web Crypto API 的直接替代品,尽可能委托给本机实现。
import { crypto } from "jsr:@std/crypto";
const file = await Deno.open("example.txt", { read: true });
我们使用 readable 属性获取异步可迭代对象。
const readableStream = file.readable;
这次,当我们调用 crypto.subtle.digest 时,我们使用的是允许我们对异步可迭代对象进行操作的导入版本。
const fileHashBuffer = await crypto.subtle.digest("SHA-256", readableStream);
最后,我们像之前一样使用 encodeHex 获取十六进制结果。
const fileHash = encodeHex(fileHashBuffer);
console.log(fileHash);

使用 Deno CLI 在本地运行 此示例

deno run --allow-read https://docs.deno.org.cn/examples/scripts/hashing.ts

您找到所需的内容了吗?

隐私政策