Bun 实现了
node:crypto 中的 createHash 和 createHmac 函数, 以及下面记录的
Bun 原生 API。Bun.password
Bun.password 是一组使用多种密码学安全算法进行密码哈希和验证的实用函数集合。
Bun.password.hash 的第二个参数是一个用于选择和配置哈希算法的参数对象。
bcrypt 时,返回的哈希以 模块化密码格式 (Modular Crypt Format) 编码,以保证与大多数现有的 bcrypt 实现兼容;使用 argon2 时,结果采用较新的 PHC 格式 编码。
verify 函数会从输入哈希中检测算法,无论其采用 PHC 格式还是 MCF 格式编码,并使用匹配的验证方法。
盐值
Bun.password.hash 会自动生成盐值,并将其包含在哈希中。
bcrypt — 模块化密码格式
在下面的 模块化密码格式 哈希示例中使用了 bcrypt: 输入:bcrypt:$2brounds:$10- 轮数(实际轮数的以 2 为底的对数)salt:Lyj9kHYZtiyfxh2G60TEfehash:qs7xkkGi+K+BVojzPfS5mjnC8OpLGtv8KJqF99eP6a4
Bun.password.hash 使用 bcrypt 算法时,不会静默截断密码,而是会先使用 SHA-512 对任何长度超过 72 字节的密码进行哈希,然后再将其传递给 bcrypt。
argon2 - PHC 格式
以下为采用 PHC 格式 的哈希(使用 argon2): 输入:- 算法:
$argon2id - 版本:
$v=19 - 内存成本:
65536 - 迭代次数:
t=2 - 并行度:
p=1 - 盐值:
$xXnlSvPh4ym5KYmxKAuuHVlDvy2QGHBNuI6bJJrRDOs - 哈希值:
$2YY6M48XmHn+s5NoBaL+ficzXajq2Yj8wut3r0vnrwI
Bun.hash
Bun.hash 是一组用于非密码学哈希的实用工具。非密码学哈希算法优化的是计算速度而非抗碰撞性或安全性。
标准的 Bun.hash 函数使用 Wyhash,从任意大小的输入生成 64 位哈希值。
TypedArray、DataView、ArrayBuffer 或 SharedArrayBuffer。
Number.MAX_SAFE_INTEGER,请将其作为 BigInt 传递,以避免精度损失。
Bun.hash 的属性使用。每种算法的 API 都相同;32 位哈希值返回 number,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() 向哈希计算器增量传入数据,它接受 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() 方法不允许多次调用。