ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

超越 seal():iron 四大底层加密方法 generateKey、encrypt、decrypt、hmacWithPassword 完整新手教程

超越 seal():iron 四大底层加密方法 generateKey、encrypt、decrypt、hmacWithPassword 完整新手教程 超越 seal()iron 四大底层加密方法 generateKey、encrypt、decrypt、hmacWithPassword 完整新手教程【免费下载链接】ironEncapsulated tokens (encrypted and maced objects)项目地址: https://gitcode.com/gh_mirrors/iron6/ironiron是一个 Node.js 加密令牌封装库它用对称加密 HMAC 完整性校验把一个 JSON 对象封成一个 URI 友好的字符串可以直接塞进 Cookie、URL 参数或 HTTP 头。本文带你跳出上层seal()/unseal()看懂 iron 加密令牌背后的四大底层方法——generateKey()、encrypt()、decrypt()、hmacWithPassword()一次搞懂令牌是怎么生成、又被验证的 seal() 令牌结构揭秘8 段式协议字符串seal()本质上是一条组装线它的产物是由*分隔的 8 段字符串Fe26.2*passwordId*saltE*iv*encrypted*expiration*saltI*hmacFe26.2—— MAC 规范化前缀与版本号定义在 lib/index.jspasswordId—— 密码标识用于密码轮换saltE/iv—— 加密盐与初始化向量encrypted—— base64url 编码后的密文expiration—— 过期时间戳可选0 表示永久saltI/hmac—— 完整性校验盐与摘要记住这个结构是理解四大方法的关键它们分别负责字符串的不同片段 ⬇️四大底层方法逐个拆解1. generateKey()把密码变成真正的密钥你传给 iron 的密码从不直接用于加密。generateKey(password, options)先用 PBKDF2 密钥派生算法把密码 随机盐加工成真实密钥并返回三样东西key—— 派生出的密钥salt—— 随机盐hex 字符串保证同样内容每次加密结果都不同iv—— 初始化向量两个使用细节密码若是 Buffer 则直接当密钥用长度必须足够若是字符串默认至少要 32 个字符minPasswordlength。实现见 lib/index.js。2. encrypt()把明文加密成密文encrypt(password, options, data)先调用generateKey()再用指定算法默认aes-256-cbc加密字符串返回{ encrypted, key }。其中key携带了派生出的 key、salt、iv——解密时必须原样复用这也是为什么 salt 和 iv 要写进令牌字符串里。实现见 lib/index.js。3. decrypt()把密文还原成明文decrypt(password, options, data)是 encrypt 的镜像操作用密码重新派生密钥需传入加密时的salt与iv否则派生出的密钥对不上然后解密并直接返回明文字符串。实现见 lib/index.js。4. hmacWithPassword()给数据盖一枚防伪印章加密解决别人看不懂HMAC 解决别人改不了。hmacWithPassword()用单独派生的密钥对数据计算 HMAC-SHA256 摘要并转成 base64url 形式方便放进 URL返回{ digest, salt }。在unseal()阶段服务端会重算摘要并与令牌中的值做恒定时间比较——只要密文被改动哪怕 1 位验证立即失败。实现见 lib/index.js。四个方法如何拼出完整的 seal()seal()的完整流程见 lib/index.js对象先JSON.stringify成字符串调encrypt()得到密文 加密密钥saltE、iv把前缀、passwordId、saltE、iv、密文、过期时间拼成MAC 基础串调hmacWithPassword()对基础串求摘要得到 saltI、digest8 段全部拼接输出最终令牌unseal()则按相反顺序回放校验前缀与过期时间 → 验证 HMAC → 调decrypt()还原对象见 lib/index.js。四大方法参数与返回值速查表方法输入返回值generateKey()密码 optionskey、salt、ivencrypt()密码 options 明文encrypted、keydecrypt()密码 options 密文明文字符串hmacWithPassword()密码 options 数据digest、salt类型签名TypeScript 声明见 lib/index.d.ts。新手高频问题清单 ✅为什么 options 必须手动传不能用默认值自动应用Iron.defaults提供了安全的默认配置AES-256-CBC SHA256、256 位盐但库有意要求你显式传入——这是逼你确认自己清楚每一项安全参数。默认值见 API.md。密码要多长泄露了会怎样默认最短 32 个字符。密码只用于派生密钥、从不传输但任何拿到它的人都能伪造令牌所以务必只在服务端保管。如何安全地轮换密码给密码指定idid 会被写进令牌解密时按 id 匹配。配合ttl选项你只需保留 TTL 窗口内用过的密码旧令牌会随时间自然失效无需无限囤积旧密码。 小结generateKey()管派生、encrypt()/decrypt()管加解密、hmacWithPassword()管防伪。理解了这四个方法seal()/unseal()对你来说就不再是黑盒。【免费下载链接】ironEncapsulated tokens (encrypted and maced objects)项目地址: https://gitcode.com/gh_mirrors/iron6/iron创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表