HTML5环境可通过jsrsasign库实现RSA加密:导入PEM公钥、调用encrypt方法得十六进制密文,适用于短文本;私钥严禁前端存储,解密须在服务端完成。

HTML5 本身不内置 RSA 加密能力,但可以通过 JavaScript 调用成熟的加密库(如 jsrsasign 或 Web Crypto API(有限支持))在浏览器端完成小段文本的 RSA 加密。关键不是“HTML5 做什么”,而是“如何在 HTML5 环境中安全、可行地用 JS 实现 RSA 加密”。
选对库:推荐 jsrsasign(兼容性好、文档清晰)
Web Crypto API 原生支持 RSA-OAEP,但需手动处理密钥导入(PKCS#8 格式)、无直接 PEM 解析,对初学者门槛高。jsrsasign 封装完善,可直接读取 PEM 格式的公钥字符串,几行代码就能加密。
- 从 jsrsasign 官网 下载最新版
jsrsasign-all-min.js,或通过 CDN 引入:
准备 RSA 公钥(服务端生成,前端只用公钥加密)
RSA 是非对称加密,前端仅负责用公钥加密,私钥必须严格保留在服务端解密。公钥一般以 PEM 格式提供,形如:
立即学习“前端免费学习笔记(深入)”;
-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq...
-----END PUBLIC KEY-----
使用时去掉换行和首尾标识,或用 JS 自动清理:
const pubKeyPem = document.getElementById('pubkey').value.replace(/-+BEGIN PUBLIC KEY-+/g, '')
.replace(/-+END PUBLIC KEY-+/g, '')
.replace(/\s/g, '');
三步完成加密:初始化 → 导入 → 加密
以下为完整可运行示例(放在
const rsa = new KJUR.crypto.RSA();rsa.setPublicKey(pubKeyPem); // 自动识别 PKCS#1 或 PKCS#8
const plainText = "hello world";
const encryptedHex = rsa.encrypt(plainText); // 返回十六进制字符串
console.log("密文(hex):", encryptedHex); // 如:a2f1e3c0...
- 输出是十六进制字符串,适合转 Base64 后通过 AJAX 发送给后端
- 若需 Base64 编码:
btoa(String.fromCharCode(...encryptedHex.match(/.{2}/g).map(b => parseInt(b, 16)))) - 注意:jsrsasign 默认使用 PKCS#1 v1.5 填充(RSAES-PKCS1-v1_5),服务端解密时需匹配
重要提醒:别在前端存私钥、别加密敏感长文本
RSA 不适合加密超过密钥长度 1/10 的数据(如 2048 位密钥最多加密约 245 字节)。小段文本(如 token、ID、短消息)可以;密码、JSON、文件内容等请改用 AES + RSA 混合方案(前端用 RSA 加密 AES 随机密钥,再用 AES 加密正文)。
前端环境无法保证绝对安全,私钥一旦暴露,整个加密体系失效。所有解密操作必须在可信服务端完成。










