一、什么是前端加密?(先纠正一个常见误区)
前端加密,指的是在浏览器 (JS 环境) 中,对数据进行加密/签名/混淆/校验等操作,再发送给后端。
重要认知:
前端加密 ≠ 绝对安全
前端代码是可被查看、可被调试、可被篡改的。所以前端加密的核心目的不是防止高手攻击,而是:
- 防止明文传输
- 防止低成本抓包、脚本刷接口
- 提高攻击门槛
- 与后端做配合校验
二、前端常见的加密 [分类]
1. 哈希 (不可逆)
哈希也叫散列,是一种将任意长度的输入(如数据、文件、消息)通过哈希函数转换成固定长度输出的过程,这个输出通常称为哈希值、散列值或摘要。
用途:
- 密码处理
- 签名校验
- 数据完整性校验
常见算法:
- MD5 (已不安全):可人为制造碰撞 (指攻击者找到两个不同的输入,经过哈希计算后,却产生相同的哈希值的过程)
- SHA-1 (不推荐,逐渐被淘汰,存在碰撞攻击)
- SHA-256 和 SHA-512 (推荐,属于 SHA-2),目前广泛应用
示例:
使用 Web Crypto API (crypto.subtle) 进行密码学操作 (需要 HTTPS),也可以使用 CryptoJS JS 的加密库,支持多种加密算法 (AES, SHA, MD5 等)。
// 1. 准备数据
const text = "123456";
const encoder = new TextEncoder();
const data = encoder.encode(text);
// 2. 计算哈希
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
// 3. 转为十六进制
const hashArray = Array.from(new Uint8Array(hashBuffer));
const hashHex = hashArray.map(b => b.toString().(, )).();
.(, hashHex);

