新闻中心
J*aScript密码学_WebCryptoAPI加密解密实战
WebCrypto API 提供加密、解密、签名等功能,支持 AES-GCM 对称加密和 RSA-OAEP 非对称加密,通过 generateKey 创建密钥,encrypt/decrypt 实现数据加解密,exportKey/importKey 管理密钥,需配合 HTTPS 与后端保障安全。

WebCrypto API 是现代浏览器提供的强大工具,用于执行常见的密码学操作,比如加密、解密、签名、哈希和密钥生成。它支持 AES、RSA、ECDSA 等多种算法,并且运行在安全的上下文中(如 HTTPS),能有效防止敏感数据暴露。下面通过实际示例展示如何使用 WebCrypto API 实现对称加密与非对称加密的基本流程。
使用 AES-GCM 进行对称加密与解密
对称加密适用于加密大量数据,加密和解密使用相同的密钥。AES-GCM 模式提供机密性和完整性验证,是推荐使用的模式之一。
生成 AES 密钥并加密字符串:
说明: 使用 crypto.subtle.generateKey() 生成一个 256 位的 AES-GCM 密钥。
代码示例:
<font face="Courier New" size="2">
async function encryptData(plainText) {
// 生成密钥
const key = await crypto.subtle.generateKey(
{ name: "AES-GCM", length: 256 },
true,
["encrypt", "decrypt"]
);
// 编码文本为 ArrayBuffer
const encoder = new TextEncoder();
const data = encoder.encode(plainText);
// 生成随机 IV(初始化向量)
const iv = crypto.getRandomValues(new Uint8Array(12));
// 执行加密
const encrypted = await crypto.subtle.encrypt(
{ name: "AES-GCM", iv: iv },
key,
data
);
// 返回密文、IV 和密钥(实际中密钥不应直接返回)
return {
encrypted: Array.from(new Uint8Array(encrypted)),
iv: Array.from(iv),
key: key // 注意:生产环境应妥善管理密钥
};
}
</font>
解密数据:
说明: 使用之前保存的密钥、IV 和密文进行解密。
<font face="Courier New" size="2">
async function decryptData(encryptedData, iv, key) {
const encryptedBuffer = new Uint8Array(encryptedData).buffer;
const ivBuffer = new Uint8Array(iv).buffer;
const decrypted = await crypto.subtle.decrypt(
{ name: "AES-GCM", iv: ivBuffer },
key,
encryptedBuffer
);
const decoder = new TextDecoder();
return decoder.decode(decrypted);
}
</font>
使用 RSA-OAEP 实现非对称加密
非对称加密适合加密小量数据或传输对称密钥。公钥加密,私钥解密。
LOVESTUdio多校园网络店铺
主要更新介绍: 完美整合Discuz!论坛,实现一站式登陆、退出、注册; 同步所有会员资料; 新增购物车功能,商品购买更加方便、快捷; 新增部分快捷菜单,网站访问更加方便; 限制首页商品、店铺标题显示长度; 修正会员后台管理不能更改密码的错误; 完善商品显示页面所有功能链接; 修正后台标签管理部分错误; 修正前台学校列表不按后台顺序显示的错误; 修正搜索功能中学校名称过长导致显示紊乱的现象; 修正
0
查看详情
生成 RSA 密钥对:
说明: 创建一对公私钥,公钥可用于加密,私钥用于解密。
<font face="Courier New" size="2">
async function generateRSAKeyPair() {
return await crypto.subtle.generateKey(
{
name: "RSA-OAEP",
modulusLength: 2048,
publicExponent: new Uint8Array([1, 0, 1]),
hash: "SHA-256"
},
true,
["encrypt", "decrypt"]
);
}
</font>
使用公钥加密,私钥解密:
<font face="Courier New" size="2">
async function rsaEncrypt(plainText, publicKey) {
const encoder = new TextEncoder();
const data = encoder.encode(plainText);
const encrypted = await crypto.subtle.encrypt(
{ name: "RSA-OAEP" },
publicKey,
data
);
return Array.from(new Uint8Array(encrypted));
}
async function rsaDecrypt(encryptedData, privateKey) {
const encryptedBuffer = new Uint8Array(encryptedData).buffer;
const decrypted = await crypto.subtle.decrypt(
{ name: "RSA-OAEP" },
privateKey,
encryptedBuffer
);
const decoder = new TextDecoder();
return decoder.decode(decrypted);
}
</font>
密钥导出与导入(可选)
有时需要将密钥保存或传输。WebCrypto 支持以 jwk 格式导出密钥。
<font face="Courier New" size="2">
async function exportKey(key) {
const jwk = await crypto.subtle.exportKey("jwk", key);
return jwk; // 可序列化为 JSON
}
async function importKey(jwk) {
return await crypto.subtle.importKey(
"jwk",
jwk,
{ name: "AES-GCM", length: 256 },
true,
["encrypt", "decrypt"]
);
}
</font>
基本上就这些。WebCrypto API 提供了安全且标准化的方式处理前端加密任务。注意:不要在客户端依赖 J*aScript 加密来实现完整安全,它只是整体安全策略的一部分,比如防止明文传输。密钥管理、HTTPS 和后端验证同样重要。
以上就是J*aScript密码学_WebCryptoAPI加密解密实战的详细内容,更多
请关注其它相关文章!
# java
# 按需
# 点对点
# 公钥
# 加密解密
# 非对称
# 如何实现
# crypto
# 敏感数据
# 后端
# 工具
# 浏览器
# 编码
# json
# 前端
# js
# javascript
# ai
# 网站建设与维护计划方案
# seo外链优化价格
# 手机推广引流营销软件
# seo营销询问火.星
# 网络营销推广论文总结ppt
# 崂山网络推广营销
# seo接单平台有哪些
# 江山网站制作推广
# 奶茶推广及营销策略
# seo慕课
# 有哪些
# 加载
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法
qq游戏大厅官方下载_qq游戏免费下载安装入口
poki网页游戏推荐_poki免费游戏平台入口
Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践
漫蛙漫画网页端入口 漫蛙2官方正版漫画站点
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
React/Next.js中实现列表项的动态选择与移动
知音漫客官网漫画下载_知音漫客网页版阅读记录
Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达
使用J*aScript检测输入元素是否包含在特定类中
抖音网页版快捷访问 抖音网页版网页版入口操作教程
Django表单提交验证失败后保持字段值不刷新
晋江读书网页版在线登录 晋江读书电脑版官网
搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具
解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
Golang如何优雅处理error_Golang error处理最佳实践总结
AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南
《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略
Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口
css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容
C#中解析不规范的HTML为XML 常见的坑与解决办法
EMS快递官网app_中国邮政速递物流手机客户端
J*a中实现Go语言select通道多路复用机制
凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法
响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配
Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】
poki免费入口快捷访问 poki人气小游戏直接玩站点
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
邮政快递单号查询入口 邮政快递物流信息在线查询入口
基于动态规划的房屋花卉种植最小成本算法详解
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
sublime怎么格式化代码_sublime代码美化与一键排版插件配置
快手极速版在线观看 官方网页版登录地址
浏览器打开即用 美图秀秀网页版入口
Node.js中HTML按钮与J*aScript函数交互的正确姿势
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】
腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录
J*aScript中在Map循环中检测并处理空数组元素
Web Components中自定义开关组件状态同步的常见陷阱与解决方案
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
J*a应用程序首次运行自动创建文件与目录的最佳实践
在J*a项目里如何构建对象之间的契约_接口约束的实际落地
必由学网页版入口 必由学官方平台直接访问
Shopware订单对象中获取产品自定义字段的正确方法
优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题
2026春节假期票务安排_2026春节放假购票指南


2025-11-30
浏览次数:次
返回列表