JavaScript无原生字符串加密,哈希(如SHA-256)仅用于不可逆摘要,密码存储等;真正可逆加密需用Web Crypto API的AES-GCM等对称算法。

JavaScript本身不提供原生的字符串加密功能,但可以通过哈希算法实现不可逆的“摘要”处理(注意:哈希 ≠ 加密,它不可解密)。若需真正加密(可逆),应使用AES等对称算法,配合Web Crypto API。
哈希不是加密,但常被误用作“简易加密”
哈希是单向运算:相同输入永远得到相同输出,但无法从结果反推原文。它适合密码存储、数据校验,不适合保护敏感明文(如API密钥、用户消息)。常见误区是用MD5或SHA-1存密码——这已不安全。
- MD5:输出128位,碰撞严重,禁止用于安全场景
- SHA-1:输出160位,已被证实可碰撞,已淘汰
- SHA-256 / SHA-512:属SHA-2系列,目前广泛推荐,Web Crypto原生支持
- SHA-3(如SHA3-256):更新标准,抗碰撞性更强,部分浏览器支持
用Web Crypto API做安全哈希(现代推荐方式)
这是浏览器内置的安全API,无需第三方库,支持SHA-256、SHA-512等。注意:只能处理Uint8Array,需先将字符串转为UTF-8字节数组。
async function hashString(str) {
const encoder = new TextEncoder();
const data = encoder.encode(str);
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
// 使用示例
hashString("hello").then(console.log); // 输出64位十六进制字符串
需要真正加密?选AES-GCM(可逆+认证)
如果目标是“加密后还能解密”,比如前端加密上传内容,必须用对称加密。Web Crypto支持AES-GCM(带完整性校验,更安全):
立即学习“Java免费学习笔记(深入)”;
- 需生成随机密钥(
crypto.subtle.generateKey)和IV(初始化向量) - 密钥不能硬编码,应由服务端分发或派生(如用PBKDF2)
- 加密结果包含密文+IV+认证标签,三者缺一不可
- 不建议自行实现加解密逻辑,优先复用成熟方案(如aes-js或Web Crypto封装库)
简单场景可用第三方库(非安全关键时)
开发调试或内部工具中,若不涉及高敏数据,可临时用轻量库快速验证:










