跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
JavaScript密码学基础
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= JavaScript密码学基础 = '''JavaScript密码学基础'''是JavaScript安全领域的核心组成部分,它涉及使用密码学技术保护数据的机密性、完整性和可用性。在现代Web开发中,前端密码学用于加密敏感数据、验证用户身份、生成数字签名等场景。本文将从基础概念入手,逐步介绍JavaScript中常用的密码学技术及其实现方式。 == 密码学基础概念 == 密码学主要分为以下三大类: * '''对称加密''':使用相同的密钥进行加密和解密(如AES)。 * '''非对称加密''':使用公钥加密、私钥解密(如RSA)。 * '''哈希函数''':将任意长度的数据映射为固定长度的摘要(如SHA-256)。 === 数学基础 === 非对称加密依赖数论难题,例如RSA基于大整数分解问题: <math>c = m^e \mod n</math> 其中: * <math>m</math>是明文 * <math>c</math>是密文 * <math>e</math>和<math>n</math>是公钥 == JavaScript中的密码学API == 现代浏览器通过[Web Crypto API]提供密码学操作支持。 === 生成随机数 === 安全随机数是密码学的基础: <syntaxhighlight lang="javascript"> // 生成16字节的随机数 const array = new Uint8Array(16); window.crypto.getRandomValues(array); console.log(Array.from(array).map(b => b.toString(16).padStart(2, '0')).join('')); </syntaxhighlight> '''输出示例''':<code>4f2a1d8c7b3e09f562a1d8c7b3e09f56</code> === 哈希计算 === 计算SHA-256哈希: <syntaxhighlight lang="javascript"> async function sha256(message) { const msgBuffer = new TextEncoder().encode(message); const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer); return Array.from(new Uint8Array(hashBuffer)) .map(b => b.toString(16).padStart(2, '0')) .join(''); } sha256('Hello World').then(console.log); </syntaxhighlight> '''输出示例''':<code>a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e</code> == 实际应用案例 == === 密码存储 === 安全存储用户密码的标准做法: <syntaxhighlight lang="javascript"> async function hashPassword(password, salt) { const encoder = new TextEncoder(); const salted = encoder.encode(password + salt); const hash = await crypto.subtle.digest('SHA-256', salted); return bufferToHex(hash); } // 使用示例 const salt = crypto.getRandomValues(new Uint8Array(16)); hashPassword('user123', salt).then(console.log); </syntaxhighlight> === 端到端加密 === 消息加密流程: <mermaid> sequenceDiagram participant ClientA participant Server participant ClientB ClientA->>ClientA: 生成密钥对 ClientA->>Server: 上传公钥 ClientB->>Server: 获取ClientA公钥 ClientB->>ClientB: 使用A公钥加密消息 ClientB->>Server: 发送加密消息 Server->>ClientA: 转发加密消息 ClientA->>ClientA: 用私钥解密 </mermaid> == 安全注意事项 == * 永远不要在客户端存储私钥 * 使用强随机数生成器(避免<code>Math.random()</code>) * 遵循OWASP密码学准则 * 注意时序攻击风险 == 进阶主题 == * 椭圆曲线密码学(ECDSA/ECDH) * WebAuthn标准 * 后量子密码学 == 参见 == * [[JavaScript安全最佳实践]] * [[Web Cryptography API详解]] * [[常见密码学攻击及防御]] 本文提供了JavaScript密码学的基础知识,开发者应根据具体需求选择适当算法并遵循安全最佳实践。随着Web技术的发展,密码学在前端应用中的重要性将持续增长。 [[Category:编程语言]] [[Category:JavaScript]] [[Category:Javascript安全]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)