JPASS
一个适用于浏览器端和 Node.js 的 RSA 库,主要基于 Tom Wu 的 RSA and ECC in JavaScript 代码进行封装。支持的功能有:
- 生成 RSA key;
- 支持长文本分组加密及解密;
- 支持多字节文本加密及解密(中文、emoji 表情等);
示例
var JPass = JPass; // 1. 加密与解密: var jpass = ; // 生成秘钥,长度为 1024(长度越长越安全,但是耗时也越长)jpass; // 需要加密的文本var text = 'Secret is 秘密 ㊙️'; // 使用 `BYTE_MODE` 进行加密(加密后的数据是经过 base64 编码的)var encrypted1 = jpass;// 使用 `URL_MODE` 进行加密(加密后的数据是经过 base64 编码的)var encrypted2 = jpass; // 解密var decrypted1 = jpass;var decrypted2 = jpass; console; // trueconsole; // true // 2. 序列化与反序列化 // 序列化:返回一个 Object,可转换为 JSON 字符串进行保存var object = jpass; // 反序列化var jpass2 = ;jpass2; // 使用反序列化后的 JPass 进行解密var decrypted3 = jpass2;var decrypted4 = jpass2; console; // trueconsole; // true // 3. 获取公钥信息和使用公钥信息加密 // 获取公钥信息var details = jpass2;var modulus = detailsmodulus; // base64 编码的 modulusvar exponent = detailsexponent; // base64 编码的 private exponent var jpass3 = ; // 设置公钥信息jpass3; // 加密var encrypted3 = jpass3;var encrypted4 = jpass3; // 解密公钥加密的数据var decrypted5 = jpass2;var decrypted6 = jpass2; console; // trueconsole; // true
BYTE_MODE
和 URL_MODE
由于原始库是不支持多字节字符加密的,为了解决这个问题,我们在进行加密前对原始数据进行了转义处理。BYTE_MODE
和 URL_MODE
是我们提供的两种处理模式。
BYTE_MODE
:在加密前将原始字符串转换为字节数组,然后对字节数组进行加密。后端解密后得到的数据为字节数组(如在 Java 语言中),需要将该字节数组转换为字符串才能得到原始字符串。URL_MODE
:在加密前对原始字符串进行 URL 编码,然后对编码后的字符串进行加密。后端解密后得到的数据为 URL 编码后的原始字符串(如在 PHP 语言中),需要将该字符串进行 URL 解码后才能得到原始字符串。
如果后端支持字节数组操作,应该尽量选择 BYTE_MODE
,该模式加密后的数据体积要更小。另外,由于前端进行了分组加密处理,后端在解密时需实现分组解密。如果后端使用 Node.js,也可以使用本模块来进行解密,本模块既支持 BYTE_MODE
解密,也支持 URL_MODE
解密,且两种模式都支持分组解密。