LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

加密解密插件:jsencrypt.js

freeflydom
2026年3月4日 9:44 本文热度 129

一、jsencrypt.js 核心介绍

jsencrypt.js 是一个基于 JavaScript 实现的 RSA 非对称加密库,它简化了前端对 RSA 加密/解密、签名/验签的操作,无需依赖后端即可完成前端侧的 RSA 加解密处理。

1. 核心特点
  • 基于开源项目 tomrus88/rsa-compat 封装,适配浏览器环境(也可兼容 Node.js);
  • 支持 RSA 密钥对生成、公钥加密、私钥解密、私钥签名、公钥验签;
  • 支持 PKCS#1 v1.5 填充方式(RSA 最常用的填充方式,也是默认方式);
  • 支持密钥格式:PKCS#1(-----BEGIN RSA PRIVATE KEY-----)、PKCS#8(-----BEGIN PRIVATE KEY-----)、X.509 公钥(-----BEGIN PUBLIC KEY-----)。
2. 适用场景
  • 前端敏感数据加密(如登录密码、手机号),避免明文传输;
  • 前后端数据加解密交互(前端公钥加密,后端私钥解密);
  • 前端签名、后端验签(防止数据被篡改)。

二、安装与引入

1. 安装方式
  • CDN 引入(最便捷)
    <script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.3.2/jsencrypt.min.js"></script>
    
  • npm 安装(模块化项目)
    npm install jsencrypt --save
    
    安装后在项目中引入:
    // ES6 模块化
    import JSEncrypt from 'jsencrypt';
    // CommonJS 模块化
    const JSEncrypt = require('jsencrypt').default;
    

三、核心使用方法

1. 基础用法:公钥加密 + 私钥解密

这是最常用的场景,前端用后端下发的公钥加密敏感数据,后端用私钥解密。

// 1. 初始化加密实例
const encrypt = new JSEncrypt();
// 2. 配置公钥(后端提供,注意保留完整的密钥格式,包括首尾的标识行)
const publicKey = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3
6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6
Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw
oYi+1hqp1fIekaxsyQIDAQAB
-----END PUBLIC KEY-----`;
encrypt.setPublicKey(publicKey);
// 3. 加密字符串(仅支持字符串,若加密对象需先转 JSON 字符串)
const plainText = '123456'; // 要加密的明文
const cipherText = encrypt.encrypt(plainText); // 加密后的密文(base64 格式)
console.log('加密结果:', cipherText);
// ------------------------------
// 私钥解密(通常在后端执行,前端仅演示)
// ------------------------------
const decrypt = new JSEncrypt();
// 配置私钥(注意:前端不要暴露真实私钥,仅测试用)
const privateKey = `-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDCFENGw33yGihy92pDjZQhl0C36rPJj+CvfSC8+q28hxA161QF
NUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6Z4UMR7EOcpfdUE9Hf3m/hs+F
UR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJwoYi+1hqp1fIekaxsyQIDAQAB
AoGBAJR8ZkCUvx5kzv+utdl7T5MnordT1TvoXXJGXK7ZZ+UuvMNUCdN2QPc4sBiA
QWvLw1cSKt5DsKZ8UETpYPy8pPYnnDEz2dDYiaew9+xEpubyeW2oH4Zx71wqBtOK
kqwrXa/pzdpiucRRjk6vE6YY7EBBs/g7uanVpGibOVAEsqH1AkEA7DkjVH28WDUg
f1nqvfn2Kj6CT7nIcE3jGJsZZ7zlZmBmHFDONMLUrXR/Zm3pR5m0tCmBqa5RK95u
412jt1dPIwJBANJT3v8pnkth48bQo/fKel6uEYyboRtA5/uHuHkZ6FQF7OUkGogc
mSJluOdc5t6hI1VsLn0QZEjQZMEOWr+wKSMCQQCC4kXJEsHAve77oP6HtG/IiEn7
kpyUXRNvFsDE0czpJJBvL/aRFUJxuRK91jhjC68sA7NsKMGg5OXb5I5Jj36xAkEA
gIT7aFOYBFwGgQAQkWNKLvySgKbAZRTeLBacpHMuQdl1DfdntvAyqpAZ0lY0RKmW
G6aFKaqQfOXKCyWoUiVknQJAXrlgySFci/2ueKlIE1QqIiLSZ8V8OlpFLRnb1pzI
7U1yQXnTAEFYM560yJlzUpOb1V4cScGd365tiSMvxLOvTA==
-----END RSA PRIVATE KEY-----`;
decrypt.setPrivateKey(privateKey);
// 解密
const decryptedText = decrypt.decrypt(cipherText);
console.log('解密结果:', decryptedText); // 输出:123456
2. 进阶用法:生成 RSA 密钥对

jsencrypt.js 支持前端生成 RSA 密钥对(仅测试/临时使用,生产环境建议后端生成):

const encrypt = new JSEncrypt({ default_key_size: 1024 }); // 指定密钥长度(1024/2048,默认1024)
// 生成密钥对
encrypt.getKey();
// 获取公钥和私钥
const publicKey = encrypt.getPublicKey(); // 公钥(X.509 格式)
const privateKey = encrypt.getPrivateKey(); // 私钥(PKCS#1 格式)
console.log('生成的公钥:', publicKey);
console.log('生成的私钥:', privateKey);
3. 签名与验签

用于验证数据是否被篡改,私钥签名,公钥验签:

const encrypt = new JSEncrypt();
// 1. 私钥签名
encrypt.setPrivateKey(privateKey);
const text = '需要签名的内容';
const signature = encrypt.sign(text, CryptoJS.SHA256, 'sha256'); // 签名(指定哈希算法)
// 2. 公钥验签
encrypt.setPublicKey(publicKey);
const isValid = encrypt.verify(text, signature, CryptoJS.SHA256); // 验签结果(true/false)
console.log('验签结果:', isValid);

注意:签名需要依赖 crypto-js 库,需额外引入:<script src="https://cdn.bootcdn.net/ajax/libs/crypto-js/4.2.0/crypto-js.min.js"></script>

四、关键注意事项

  1. 密钥长度:建议使用 2048 位密钥(1024 位安全性较低),但 2048 位加密速度会稍慢;
  2. 加密内容长度限制:RSA 加密单段内容长度有限制(≈ 密钥长度/8 - 11),例如 1024 位密钥最多加密 117 字节,2048 位最多加密 245 字节。若加密长文本,需分段加密或结合对称加密(如 AES);
  3. 安全性:前端不要暴露私钥,公钥可公开;加密仅解决传输过程中的明文泄露,需配合 HTTPS 使用;
  4. 兼容性:兼容主流浏览器,IE 需版本 ≥ 10;Node.js 环境使用需额外安装 buffer 依赖;
  5. 性能:前端 RSA 加解密性能较低,避免频繁调用,建议仅加密敏感小数据(如密码、token)。

五、常见问题

  • 加密结果为 null:大概率是密钥格式错误(如缺少首尾标识行、空格/换行错误),或加密内容超过长度限制;
  • 验签失败:哈希算法不匹配(如签名用 sha256,验签用 sha1),或数据被篡改,或密钥不匹配;
  • 中文乱码:加密前将中文转 utf8 编码,解密后再转回。

总结

  1. jsencrypt.js 是前端实现 RSA 非对称加密的轻量库,核心用于公钥加密、私钥解密、签名验签;
  2. 核心用法是初始化实例 → 设置密钥 → 执行加解密/签名验签,需注意密钥格式和内容长度限制;
  3. 生产环境中,前端仅用公钥加密敏感数据,私钥解密/验签由后端完成,且需配合 HTTPS 保障安全。

转自https://blog.csdn.net/cuclife/article/details/158622351


该文章在 2026/3/4 9:44:17 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved