项目中遇到了SubtleCrypto:的需求,查阅了不少资料,给大家分享下我的方案。
Found this helpful? Share it with your team and leave a comment below!
正文
此功能非常成熟,适用于许多设备和浏览器版本。自2020年1月起,它可在所有浏览器上使用。
此功能仅在中可用此功能在中可用It takes as its arguments a
使用某些算法特定的参数进行加密,以及要加密的数据(也称为“明文” )。
将使用加密数据(也称为“密文” )完成。ENCRYPT (算法,密钥,数据)
包含要加密的数据(也称为包含“密文”的数据)。
遇到以下异常时,将拒绝Promise :
当请求的操作对于提供的密钥无效时引发(例如,无效的加密算法或指定加密算法的无效密钥)。
当操作因操作特定原因(例如,大小无效的算法参数或长于2的AES-GCM明文)失败时引发
Web Crypto API提供四种算法,支持
它们都基于相同的底层密码,即AES (高级加密标准)。
Web Crypto API支持三种不同的AES模式: CBC (密码区块链)
,其中包括检查密文是否未被攻击者修改。
攻击,其中攻击者可以要求系统解密任意消息,并使用结果来推断有关
虽然可以将身份验证添加到CTR和CBC模式,但它们默认情况下不提供身份验证,并且在手动实施时,很容易出现轻微但严重的错误。
GCM确实提供内置身份验证,因此通常建议使用其他两种AES模式。
更多内容
除了上面提到的内容,还有几个点值得注意。首先是浏览器的兼容性,不同浏览器对Web Crypto API的支持程度有所不同。其次是性能问题,加密操作在大量数据时可能会影响用户体验。最后是密钥管理,如何安全地存储和传输密钥也是一个需要考虑的问题。
有问题欢迎评论区交流,看到会第一时间回复大家一起讨论。
Reference: SubtleCrypto: encrypt() method - Web APIs | MDN