跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
JavaScript Web加密API
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= JavaScript Web加密API = '''JavaScript Web加密API'''(Web Cryptography API)是一组用于在Web应用中执行基本加密操作的JavaScript接口,由W3C标准化。它允许开发者在浏览器环境中安全地生成密钥、加密/解密数据、签名验证以及散列计算,而无需依赖第三方库或服务器端处理。 == 概述 == Web加密API通过{{code|crypto.subtle}}对象提供底层加密功能,支持以下操作: * '''对称加密'''(如AES) * '''非对称加密'''(如RSA、ECDSA) * '''散列函数'''(如SHA-256) * '''密钥生成与管理''' * '''安全随机数生成''' 该API设计遵循以下原则: * 仅在HTTPS或localhost环境下可用(安全上下文) * 异步操作(返回Promise对象) * 限制导出未加密的密钥 == 核心概念 == === 密钥类型 === <mermaid> classDiagram class CryptoKey { +type: "secret"|"public"|"private" +extractable: boolean +algorithm: KeyAlgorithm +usages: KeyUsage[] } </mermaid> === 支持的算法 === {| class="wikitable" |+ 常用算法列表 ! 类型 !! 算法名称 !! 典型用途 |- | 对称加密 || AES-CBC, AES-GCM || 数据加密 |- | 非对称加密 || RSA-OAEP, ECDH || 密钥交换 |- | 签名算法 || RSASSA-PKCS1-v1_5, ECDSA || 数字签名 |- | 散列 || SHA-1, SHA-256, SHA-512 || 数据完整性验证 |} == 基本使用示例 == === 生成AES密钥 === <syntaxhighlight lang="javascript"> window.crypto.subtle.generateKey( { name: "AES-GCM", length: 256, // 密钥长度 }, true, // 是否可导出 ["encrypt", "decrypt"] // 密钥用途 ).then(key => { console.log("生成的密钥:", key); }).catch(err => { console.error("密钥生成失败:", err); }); </syntaxhighlight> === 加密数据 === <syntaxhighlight lang="javascript"> async function encryptData(plaintext, key) { const iv = window.crypto.getRandomValues(new Uint8Array(12)); // 初始化向量 const ciphertext = await window.crypto.subtle.encrypt( { name: "AES-GCM", iv: iv }, key, new TextEncoder().encode(plaintext) ); return { iv, ciphertext }; } // 使用示例 const data = "机密消息123"; encryptData(data, aesKey).then(result => { console.log("加密结果:", { iv: Array.from(result.iv), ciphertext: new Uint8Array(result.ciphertext) }); }); </syntaxhighlight> == 实际应用场景 == === 密码学安全随机数 === 生成用于CSRF令牌的随机值: <syntaxhighlight lang="javascript"> function generateSecureToken(length) { const array = new Uint8Array(length); window.crypto.getRandomValues(array); return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join(''); } // 输出示例: "4f7a1b9c3e..." </syntaxhighlight> === 客户端密码哈希 === 在发送到服务器前处理用户密码: <syntaxhighlight lang="javascript"> async function hashPassword(password, salt) { const encoder = new TextEncoder(); const material = encoder.encode(password + salt); const hash = await window.crypto.subtle.digest('SHA-256', material); return Array.from(new Uint8Array(hash)) .map(b => b.toString(16).padStart(2, '0')) .join(''); } </syntaxhighlight> == 数学基础 == Web加密API实现的算法基于以下数学概念: * '''RSA加密''':基于大数分解难题 <math>c = m^e \mod n</math> * '''椭圆曲线加密''':基于椭圆曲线离散对数问题 <math>y^2 = x^3 + ax + b</math> == 安全注意事项 == 1. '''IV管理''':每次加密应使用唯一的初始化向量 2. '''密钥存储''':避免在客户端长期存储敏感密钥 3. '''算法选择''': * 避免使用已破解算法(如RC4、MD5) * 推荐使用AES-GCM、SHA-256等现代算法 4. '''错误处理''':妥善捕获并处理加密操作中的异常 == 浏览器兼容性 == 大多数现代浏览器支持Web加密API: * Chrome 37+ * Firefox 34+ * Edge 12+ * Safari 11+ 可通过以下代码检测支持情况: <syntaxhighlight lang="javascript"> if (!window.crypto || !window.crypto.subtle) { console.warn("Web Cryptography API not supported!"); } </syntaxhighlight> == 进阶主题 == * '''Web Workers中的加密''':将计算密集型操作移出主线程 * '''密钥导入/导出''':使用JWK格式交换密钥 * '''性能优化''':批量处理加密操作 * '''与WebAuthn集成''':用于生物识别认证 == 参见 == * [[/JavaScript安全/内容安全策略(CSP)]] * [[/JavaScript安全/同源策略]] * [[/JavaScript安全/HTTPS实施]] [[Category:JavaScript安全]] [[Category:Web API]] [[Category:加密技术]] [[Category:编程语言]] [[Category:JavaScript]] [[Category:Javascript安全]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:Code
(
编辑
)