新闻中心

j*ascript怎样进行数据加密和解密?_j*ascript的Web Crypto API如何使用?

2025-12-15
浏览次数:
返回列表
J*aScript无内置encrypt/decrypt函数,但现代浏览器支持Web Crypto API,提供AES-GCM等安全加密能力,需用crypto.getRandomValues生成IV,密钥默认不可导出,导出须用JWK格式并妥善保护。

javascript怎样进行数据加密和解密?_javascript的web crypto api如何使用?

J*aScript 本身不内置传统意义上的“加密函数”(比如 encrypt()decrypt()),但现代浏览器提供了标准、安全的 Web Crypto API,可用于对称加密(如 AES)、非对称加密(如 RSA)、哈希、密钥派生等。它替代了过去依赖第三方库(如 CryptoJS)的做法,且由浏览器原生支持、性能好、符合安全规范。

使用 Web Crypto API 进行 AES-GCM 加密与解密

AES-GCM 是目前推荐的对称加密方式,兼顾保密性、完整性与认证。注意:密钥不能硬编码,应安全生成并妥善管理。

  • 生成密钥crypto.subtle.generateKey("AES-GCM", true, ["encrypt", "decrypt"])
  • 加密数据:需提供密钥、随机 IV(12 字节推荐)、可选附加认证数据(AAD),返回加密后的 ArrayBuffer
  • 解密数据:用相同密钥、IV 和 AAD 调用 decrypt(),失败会抛出异常(如 IV 错误或密文被篡改)

示例关键步骤(省略 Promise 处理):

晓象AI资讯阅读神器 晓象AI资讯阅读神器

晓象-AI时代的资讯阅读神器

晓象AI资讯阅读神器 72 查看详情 晓象AI资讯阅读神器 const iv = crypto.getRandomValues(new Uint8Array(12));
const encoded = new TextEncoder().encode("hello world");
const encrypted = await crypto.subtle.encrypt({ name: "AES-GCM", iv }, key, encoded);

如何安全地导入/导出密钥?

密钥默认不可导出(extractable: false),防止内存泄露。若需传输或存储,必须设为 true,并用 wrapKey/unwrapKey 配合另一个密钥保护(例如用 RSA-OAEP 封装 AES 密钥)。

  • 导出为 JSON Web Key(JWK)格式:crypto.subtle.exportKey("jwk", key)
  • 从 JWK 导入:crypto.subtle.importKey("jwk", jwk, alg, true, usage)
  • 切勿用 JSON.stringify() 直接存裸密钥——JWK 中的 k 字段是 base64url 编码的原始密钥材料,仍需保密

常见误区和注意事项

  • 不要用 Math.random() 生成 IV 或盐值——必须用 crypto.getRandomValues()
  • TextEncoder/TextDecoder 只处理 UTF-8;二进制数据(如图片)直接操作 ArrayBuffer 即可
  • Web Crypto API 是异步的,所有方法返回 Promise,不能同步调用
  • 不支持 Node.js 默认环境(v15+ 可用内置 crypto 模块,API 不同)
  • 部分算法(如 RSA-PSS、ECDSA)仅在安全上下文(HTTPS 或 localhost)中可用

基本上就这些。Web Crypto API 功能完整但接口偏底层,写起来比 CryptoJS 略繁琐,但换来的是标准化与安全性。实际项目中可封装成简单函数(如 encryptAes(text, key)),避免重复处理编码/IV/错误逻辑。

以上就是j*ascript怎样进行数据加密和解密?_j*ascript的Web Crypto API如何使用?的详细内容,更多请关注其它相关文章!


# java  # javascript  # ai  # 字节  # 浏览器  # 编码  # node  # json  # node.js  # js  # 邳州信息化网站推广公司  # 云南seo技巧哪个适用  # 黄冈电商seo推广招聘  # 到什么网站推广民宿好呢  # 不支持  # 解决问题  # 的是  # 中文网  # 相关文章  # 设为  # 如何处理  # 第一个  # 有哪些  # 如何使用  # crypt  # 数据加密  # display none seo  # 福田东坑网站建设  # 网站建设费用20万  # 深圳物业seo团队  # 网站建设具体是什么  # 推广营销达人怎么做好 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】  抖音网页版怎么|直播|_抖音网页版开播操作指南  Go调试环境为何无法启动_Go调试器启动失败原因与解决策略  怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】  qq游戏大厅官方下载_qq游戏免费下载安装入口  在J*a中如何隐藏复杂性_使用门面模式组织对象交互  随机参数递归函数的基准调用次数与时间复杂度探究  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  TikTok网页版直接登录 TikTok网页端官方平台入口  NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略  使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性  邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧  Go RPC HTTP服务正确实现与常见陷阱解析  必由学官网首页入口 必由学教师网页版登录指南  2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC  Python实时数据流中的动态最值查找策略  将HTML动态表格多行数据保存到Google Sheet的教程  PostgreSQL海量数据高效导入策略:Python与Django实践指南  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  解决J*aScript中重复选择项的确认对话框显示问题  钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法  使用 Pandas 高效处理 .dat 文件:字符清理与数据计算  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  Tailwind CSS line-clamp 布局问题解析与修复指南  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  外媒分析《GTA6》定价:卖100美元可以但真没必要!  css链接悬停下划线样式如何自定义_使用::after结合content和transition  J*aScript对象创建方式_J*aScript设计模式应用  Angular中父组件异步更新子组件复选框状态的实践指南  知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  抖音网页版平台入口 抖音网页版官网在线访问教程  深入理解J*aScript Promise异步执行与微任务队列  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析  高德地图公交到站提醒失败如何解决 高德提醒权限设置  抖音创作助手登录入口_抖音创作辅助工具官网直达  Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】  Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区  iwriter统一登录平台 iwrite账号密码登录页面  最新韩小圈网页版登录入口_官网在线观看官方链接  在Typer应用中优雅地处理和重组任意命令行参数  解决Django多数据库/多Schema环境下外键迁移问题  Win11网速慢怎么解决 Win11网络设置优化解除限速  Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】  微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法  c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解  2025-2030年全球乘用车销量预测:新能源成增长主力 

搜索