除了下面记录的 Bun 原生 API 外,Bun 还实现了
node:crypto 中的 createHash 和 createHmac 函数。Bun.password
Bun.password 是一组实用函数,用于使用各种加密安全算法进行密码哈希和验证。
Bun.password.hash 的第二个参数是一个参数对象,用于选择并配置哈希算法。
bcrypt 时,返回的哈希以模块化加密格式编码,以便与大多数现有 bcrypt 实现兼容;使用 argon2 时,结果以更新的 PHC 格式编码。
verify 函数会自动检测输入哈希中的算法,无论是 PHC 编码还是 MCF 编码,并使用匹配的验证方法。
盐值
Bun.password.hash 自动生成盐值并将其包含在哈希中。
bcrypt - 模块化加密格式
以下模块化加密格式哈希(由bcrypt 使用):
输入:
bcrypt:$2brounds:$10- 轮次(实际轮数的 log2)salt:Lyj9kHYZtiyfxh2G60TEfehash:qs7xkkGiEFFDi3iJGc50ZG/XJ1sxIFi
bcrypt 算法的 Bun.password.hash 会在将密码传递给 bcrypt 之前,对超过 72 字节的密码使用 SHA-512 进行哈希。
argon2 - PHC 格式
以下 PHC 格式哈希(由argon2 使用):
输入:
algorithm:$argon2idversion:$v=19memory cost:65536iterations:t=2parallelism:p=1salt:$xXnlSvPh4ym5KYmxKAuuHVlDvy2QGHBNuI6bJJrRDOshash:$2YY6M48XmHn+s5NoBaL+ficzXajq2Yj8wut3r0vnrwI
Bun.hash
Bun.hash 是一组用于非加密哈希的实用工具。非加密哈希算法针对计算速度进行了优化,而非抗碰撞性或安全性。
标准的 Bun.hash 函数使用 Wyhash 从任意大小的输入生成 64 位哈希。
TypedArray、DataView、ArrayBuffer 或 SharedArrayBuffer。
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 提供数据,该方法接受 string、TypedArray 和 ArrayBuffer。
'utf-8')。支持以下编码:
.digest() 计算最终哈希值。默认情况下,此方法返回包含哈希值的 Uint8Array。
.digest() 传递编码参数:
.digest() 可以将哈希值写入现有的 TypedArray 中,而不是分配新的。
Bun.CryptoHasher 中的 HMAC
Bun.CryptoHasher 可以计算 HMAC 摘要。将密钥传递给构造函数。
"blake2b256""blake2b512""md4""md5""ripemd160""sha1""sha224""sha256""sha384""sha512""sha512-224""sha512-256""sha3-224""sha3-256""sha3-384""sha3-512"
Bun.CryptoHasher 不同,HMAC 的 Bun.CryptoHasher 实例在调用 .digest() 后不会重置,再次使用同一个实例会抛出错误。
其他方法如 .copy() 和 .update() 受支持(只要在 .digest() 之前调用),但像 .digest() 这样结束 hasher 的方法不支持。