一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第16天,点击查看活动详情。
crypto 是加密相关的 API,这部分 API 也是浏览器提供的,可以通过 window.crypto 来访问,它提供了一些最基本的加密能力,这些 API 比较底层,涉及到很多密码学知识,因此实际开发中直接使用这部分 API 的场景并不多。但是网络安全是一门重要的必修课,这部分 API 还是非常有必要了解一下的。
crypto 上面有一个属性 subtle 和一个方法 getRandomValues,这里先来看 getRandomValues。getRandomValues 使用来获取随机数的,在加解密中经常需要获取安全的随机值,这个 API 可以用于这类场景下随机数的获取,它接收一个 TypedArray 作为参数,会将产生的随机数添加到二进制数组中。
subtle 上面有很多加密解密相关的方法,它是加解密 API 的核心,我们来看下几个方法:
- sign 和 verify:这是一组相对的方法,sign 是创建签名,verify 验证签名的正确性,签名与加密的区别是签名不可逆,只能验证不能反向解析原始数据。
- encrypt 和 decrypt:这一组是加密和解密,支持多种加密算法。
- digest:生成数据摘要。
- generateKey 和 deriveKey:这两个函数都可以生成秘钥,用于上面的加解密方法使用。
- importKey 和 exportKey:用于导入和导出加密秘钥。
- wrapKey 和 unwrapKey:对于敏感秘钥,需要对秘钥进行加解密。
在 MDN 文档上面可以找到各个方法支持的加解密算法,常见的对称加密和非对称加密算法大多数都可以找到,调用加解密方法时可以传入这些算法来执行对应的操作。
最后注意,加解密 API 还是比较敏感的,除非你清楚自己在做什么,否则不能轻易调用。