html5需借助cryptojs库实现aes对称加密(推荐cbc模式配iv)或md5/sha256哈希,注意密钥编码统一、避免ecb不安全模式,并强调前端哈希不可替代服务端密码处理。

HTML5 本身不提供加密能力,但可以在浏览器环境中通过引入 CryptoJS 库,使用 JavaScript 对文本进行对称加密(如 AES)或哈希运算。关键在于正确引入库、选择合适模式与填充、统一编码和密钥处理。
AES 加密文本(推荐 ECB 或 CBC 模式)
CryptoJS 默认使用 AES-128,密钥可为字符串或 WordArray。注意:ECB 不安全,仅用于简单演示;生产环境建议用 CBC 并传入随机 IV。
- 引入 CryptoJS(CDN 方式):<script src="https://<a%20style=" color: text-decoration:underline title="cdn" href="https://www.php.cn/zt/19618.html" target="_blank">cdn<a style="color:#f60; text-decoration:underline;" title= "js" href="https://www.php.cn/zt/15802.html" target="_blank">js.cloudflare.com/<a style="color:#f60; text-decoration:underline;" title= "ajax" href="https://www.php.cn/zt/15849.html" target="_blank">ajax/libs/<a style="color:#f60; text-decoration:underline;" title= "crypto" href="https://www.php.cn/zt/128236.html" target="_blank">crypto-js/4.2.0/crypto-js.min.js"></script>
- ECB 示例(无 IV,密钥直接字符串):
const encrypted = CryptoJS.AES.encrypt("Hello World", "my-secret-key").toString();
const decrypted = CryptoJS.AES.decrypt(encrypted, "my-secret-key").toString(CryptoJS.enc.Utf8); - CBC 示例(需显式指定 IV 和填充):
const key = CryptoJS.enc.Utf8.parse("16-bytes-key-1234");
const iv = CryptoJS.enc.Utf8.parse("16-bytes-iv-5678");
const encrypted = CryptoJS.AES.encrypt("Hello World", key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
const decrypted = CryptoJS.AES.decrypt(encrypted, key, { iv: iv }).toString(CryptoJS.enc.Utf8);
MD5 / SHA256 哈希文本(不可逆)
适合密码摘要、校验值生成,但不能用于“加密后解密”。注意:前端哈希不能替代服务端密码处理,仅作辅助。
- MD5:CryptoJS.MD5("password123").toString()
- SHA256:CryptoJS.SHA256("data").toString()
- 加盐哈希(提升安全性):
CryptoJS.SHA256("password" + "salt123").toString()
密钥与编码注意事项
常见乱码或解密失败,多因编码不一致。CryptoJS 默认按 UTF-8 处理字符串,但密钥若含中文或特殊字符,需显式解析。
立即学习“前端免费学习笔记(深入)”;
- 避免直接用中文当密钥:CryptoJS.enc.Utf8.parse("密钥") 更可靠
- Base64 密文需保持原样传输,不要二次 encodeURI 或截断
- 解密前确认密文是合法 Base64 字符串(含 A-Za-z0-9+/=,长度 4 的倍数)
完整 HTML 实例(AES-CBC 加密/解密)
复制保存为 .html 文件即可在浏览器中运行:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js"></script>
<script><br> const KEY = CryptoJS.enc.Utf8.parse('1234567890123456');<br> const IV = CryptoJS.enc.Utf8.parse('abcdef1234567890');<br> function encrypt() {<br> const txt = document.getElementById('text').value;<br> const encrypted = CryptoJS.AES.encrypt(txt, KEY, { iv: IV, mode: CryptoJS.mode.CBC });<br> document.getElementById('result').innerText = '密文: ' + encrypted.toString();<br> }<br> function decrypt() {<br> const cipher = document.getElementById('result').innerText.split(': ')[1];<br> const decrypted = CryptoJS.AES.decrypt(cipher, KEY, { iv: IV });<br> document.getElementById('result').innerText = '原文: ' + decrypted.toString(CryptoJS.enc.Utf8);<br> }<br> </script>











