Skip to main content
除了下面记录的 Bun 原生 API 外,Bun 还实现了 node:crypto 中的 createHashcreateHmac 函数。

Bun.password

Bun.password 是一组实用函数,用于使用各种加密安全算法进行密码哈希和验证。
Bun.password.hash 的第二个参数是一个参数对象,用于选择并配置哈希算法。
用于创建哈希的算法存储在哈希本身中。使用 bcrypt 时,返回的哈希以模块化加密格式编码,以便与大多数现有 bcrypt 实现兼容;使用 argon2 时,结果以更新的 PHC 格式编码。 verify 函数会自动检测输入哈希中的算法,无论是 PHC 编码还是 MCF 编码,并使用匹配的验证方法。
所有函数的同步版本也可用。这些函数计算量大,因此阻塞 API 可能会降低应用程序性能。

盐值

Bun.password.hash 自动生成盐值并将其包含在哈希中。

bcrypt - 模块化加密格式

以下模块化加密格式哈希(由 bcrypt 使用): 输入:
输出:
格式由以下部分组成:
  • bcrypt$2b
  • rounds$10 - 轮次(实际轮数的 log2)
  • saltLyj9kHYZtiyfxh2G60TEfe
  • hashqs7xkkGiEFFDi3iJGc50ZG/XJ1sxIFi
默认情况下,bcrypt 库会截断超过 72 字节的密码。为了避免静默截断,对 bcrypt 算法的 Bun.password.hash 会在将密码传递给 bcrypt 之前,对超过 72 字节的密码使用 SHA-512 进行哈希。

argon2 - PHC 格式

以下 PHC 格式哈希(由 argon2 使用): 输入:
输出:
格式由以下部分组成:
  • algorithm$argon2id
  • version$v=19
  • memory cost65536
  • iterationst=2
  • parallelismp=1
  • salt$xXnlSvPh4ym5KYmxKAuuHVlDvy2QGHBNuI6bJJrRDOs
  • hash$2YY6M48XmHn+s5NoBaL+ficzXajq2Yj8wut3r0vnrwI

Bun.hash

Bun.hash 是一组用于非加密哈希的实用工具。非加密哈希算法针对计算速度进行了优化,而非抗碰撞性或安全性。 标准的 Bun.hash 函数使用 Wyhash 从任意大小的输入生成 64 位哈希。
输入可以是字符串、TypedArrayDataViewArrayBufferSharedArrayBuffer
第二个参数是一个可选整数种子。对于 64 位哈希,将超过 Number.MAX_SAFE_INTEGER 的种子作为 BigInt 传递,以避免精度损失。
其他哈希算法作为 Bun.hash 的属性可用。每个算法的 API 相同;32 位哈希返回数字,64 位哈希返回 bigint。

Bun.CryptoHasher

Bun.CryptoHasher 使用加密哈希算法增量计算字符串或二进制数据的哈希值。支持以下算法:
  • "blake2b256"
  • "blake2b512"
  • "blake2s256"
  • "md4"
  • "md5"
  • "ripemd160"
  • "sha1"
  • "sha224"
  • "sha256"
  • "sha384"
  • "sha512"
  • "sha512-224"
  • "sha512-256"
  • "sha3-224"
  • "sha3-256"
  • "sha3-384"
  • "sha3-512"
  • "shake128"
  • "shake256"
使用 .update() 增量地向 hasher 提供数据,该方法接受 stringTypedArrayArrayBuffer
对于字符串,可选的第二个参数指定编码(默认 'utf-8')。支持以下编码:
所有数据输入完成后,使用 .digest() 计算最终哈希值。默认情况下,此方法返回包含哈希值的 Uint8Array
要获取哈希字符串,向 .digest() 传递编码参数:
或者,.digest() 可以将哈希值写入现有的 TypedArray 中,而不是分配新的。

Bun.CryptoHasher 中的 HMAC

Bun.CryptoHasher 可以计算 HMAC 摘要。将密钥传递给构造函数。
HMAC 支持的算法范围更有限:
  • "blake2b256"
  • "blake2b512"
  • "md4"
  • "md5"
  • "ripemd160"
  • "sha1"
  • "sha224"
  • "sha256"
  • "sha384"
  • "sha512"
  • "sha512-224"
  • "sha512-256"
  • "sha3-224"
  • "sha3-256"
  • "sha3-384"
  • "sha3-512"
与非 HMAC 的 Bun.CryptoHasher 不同,HMAC 的 Bun.CryptoHasher 实例在调用 .digest() 后不会重置,再次使用同一个实例会抛出错误。 其他方法如 .copy().update() 受支持(只要在 .digest() 之前调用),但像 .digest() 这样结束 hasher 的方法不支持。