一、基础加密概念与分类
1. 对称加密(Symmetric Encryption)
- 原理:加密和解密使用同一密钥,计算效率高但密钥传输不安全。
- 常见算法:AES(高级加密标准,替代DES/3DES)、ChaCha20。
- 前端应用场景:
- 本地存储加密(如localStorage存储敏感信息)。
- 临时数据加密传输(需配合安全信道传递密钥)。
- 面试应答示例:
“对称加密的核心是‘同一密钥加解密’,例如AES算法广泛用于前端本地数据加密。但需注意:前端直接存储密钥存在泄露风险,通常需配合后端生成密钥并通过HTTPS传输。”
2. 非对称加密(Asymmetric Encryption)
- 原理:使用公钥加密、私钥解密(或反之),密钥对唯一。
- 常见算法:RSA、ECC(椭圆曲线加密,更高效)。
- 前端应用场景:
- HTTPS握手阶段的密钥协商(公钥加密对称密钥)。
- 数字签名(私钥签名,公钥验证,确保数据完整性)。
- 面试应答示例:
“非对称加密解决了对称加密的密钥传输问题。比如HTTPS中,客户端用服务器公钥加密随机生成的AES密钥,服务器用私钥解密获取,后续通信使用AES加密。但RSA加密大文件效率低,因此前端通常用于‘密钥交换’而非数据全量加密。”
二、前端加密实战场景
1. 数据传输加密:HTTPS与TLS/SSL
- 核心流程:
- 客户端请求服务器公钥(通过CA证书验证合法性)。
- 客户端生成随机对称密钥,用公钥加密后发送给服务器。
- 双方用对称密钥加密后续通信数据。
- 面试考点:
- 为什么HTTPS比HTTP安全?(中间人无法篡改加密数据)。
- TLS握手过程中加密算法的配合使用(非对称+对称)。
2. 前端数据加密处理
- 场景1:表单提交前加密
- 方案:用AES加密敏感字段(如密码),配合后端公钥加密AES密钥。
- 注意:纯前端加密无法防止“中间人篡改请求”,需配合后端校验。
- 场景2:本地存储加密
- 方案:用CryptoJS等库对localStorage数据加密(如用户隐私信息)。
- 示例代码(AES加密):
import CryptoJS from 'crypto-js'; const encrypt = (data, key) => CryptoJS.AES.encrypt(data, key).toString(); const decrypt = (ciphertext, key) => CryptoJS.AES.decrypt(ciphertext, key).toString(CryptoJS.enc.Utf8);
3. 哈希(Hash)与加密的区别
- 核心差异:
- 加密是可逆的(可解密),哈希是单向的(不可逆)。
- 哈希用于数据完整性校验(如MD5、SHA-256)。
- 前端应用:
- 密码存储:前端对密码做SHA-256哈希后传输,避免明文泄露。
- 文件校验:计算文件哈希值与服务器比对,验证文件完整性。
三、问题
问题1:前端为什么需要加密?直接传JSON不行吗?
- 应答思路:
“前端加密主要解决三个问题:- 数据泄露:防止中间人嗅探(如HTTP明文传输密码);
- 数据篡改:通过哈希校验(如SHA-256)确保数据未被修改;
- 身份伪造:非对称加密的数字签名可验证数据来源。
虽然JSON传输方便,但敏感信息(如银行卡号)必须加密,且需配合HTTPS保证传输信道安全。”
问题2:前端加密有哪些安全风险?
- 应答思路:
“纯前端加密的风险包括:- 密钥泄露:前端代码开源,硬编码的密钥可能被逆向工程获取(需后端动态生成密钥);
- 中间人攻击:若未使用HTTPS,攻击者可拦截请求并替换加密参数;
- 加密逻辑漏洞:如使用弱加密算法(MD5可被碰撞攻击),或加密流程不完整(未校验数据完整性)。
因此,前端加密需与后端安全策略结合,例如:后端生成随机密钥、前端加密后再由后端二次加密存储。”
问题3:如何在前端实现密码的安全传输?
- 应答思路:
“推荐方案:- 前端用SHA-256对密码做哈希(避免明文传输);
- 后端接收哈希值后,加盐(Salt)再做一次哈希存储;
- 登录时,前端哈希+后端加盐哈希双重验证。
进阶方案:配合RSA加密——前端用服务器公钥加密密码哈希,防止传输中被篡改。但需注意:前端加密不能替代HTTPS,必须在HTTPS信道下实施。”
四、加分知识点(体现深度)
- Web Crypto API:浏览器原生加密接口(比第三方库更安全),支持AES、RSA、SHA等算法。
- JWT与加密:JWT的签名(Signature)使用哈希算法(如HMAC-SHA256),而非加密,需区分“签名”与“加密”的概念。
- 零知识证明:前端可实现简单的零知识验证(如zk-SNARKs),但计算量较大,多用于区块链场景。
总结回答结构
“前端加密主要涉及三类技术:
- 对称加密(如AES)用于数据加密,效率高但需安全传递密钥;
- 非对称加密(如RSA)用于密钥交换和数字签名,解决对称加密的密钥安全问题;
- 哈希算法(如SHA-256)用于数据完整性校验,是不可逆的单向加密。
实际应用中,前端加密需结合场景:
- 传输安全:必须使用HTTPS,利用TLS握手阶段的非对称加密协商对称密钥;
- 数据安全:表单敏感字段(如密码)可先用SHA-256哈希,再配合后端加盐存储;
- 本地安全:localStorage数据可用AES加密,但密钥需由后端动态生成并通过HTTPS传输。