一、什么是前端加密?(先纠正一个常见误区)
前端加密,指的是在浏览器 (js 环境) 中,对数据进行加密/签名/混淆/校验等操作,再发送给后端。
重要认知:
前端加密 ≠ 绝对安全
前端代码是可被查看、可被调试、可被篡改的。所以前端加密的核心目的不是 [防止高手],而是:
- 防止明文传输
- 防止低成本抓包、脚本刷接口
- 提高攻击门槛
- 与后端做配合校验
二、前端常见的加密 [分类]
1. 哈希 (不可逆)
哈希也叫散列,是一种将任意长度的输入如数据、文件、消息通过哈希函数转换成固定长度输出的过程,这个输出通常成为哈希值、散列值或摘要。
用途:
- 密码处理
- 签名校验
- 数据完整性校验
常见算法:
- MD5(已不安全): 可人为制造碰撞(指攻击者找到两个不同的输入,经过哈希计算后,却产生相同的哈希值的过程)
- SHA-1 (不推荐,逐渐被淘汰,存在碰撞攻击)
- SHA-256 和 SHA-512(推荐,属于 SHA-2),目前广泛应用
示例:
- 使用 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.().(, )).();
.(, hashHex);

