一个用于浏览器端 RSA 加密的辅助函数
一个用于浏览器端 RSA 加密的辅助函数,支持多字节字符加密,支持长文本分组加密
JavaScript 安全处理
共3Star
详细介绍
RSA Encrypt
一个用于浏览器端 RSA 加密的辅助函数,支持多字节字符加密,支持长文本分组加密。主要基于 Tom Wu 的 RSA and ECC in JavaScript 代码进行封装。
接口说明
/**
* 加密指定文本
*
* @param {number} keybits keybits 秘钥长度
* @param {string} modulus base64 编码的 modulus 信息
* @param {string} exponent base64 编码的 public exponent 信息
* @param {string} text 需要加密的文本(在加密前会被 URI 编码)
* @throws {TypeError|Error} 加密失败或参数错误时抛出错误
* @returns {string} 返回 base64 编码后的加密数据
*/
RSAEncrypt(keybits, modulus, exponent, text);
其它具体细节请查看源代码。
加密说明
本函数的所进行的加密是指:使用 RSA 公钥信息对明文进行加密。除此之外,为了避免直接对中文等多字节字符进行加密导致出错,在进行 RSA 加密前,我们先对明文进行了 URI 编码(基于 RFC 3986 规范)。因此,服务端在(分组)解密时,应使用以下步骤:
- 提交的数据 --> base64解码 --> 加密的数据
- 加密的数据 --> RSA解密 --> URI编码的原始数据
- 拼接所有分组的URI编码的原始数据 --> URI解码(RFC 3986) --> 原始的数据
由于URI编码的原因,在使用此函数加密含有多字节字符(如中文)的数据时,密文的体积会远大于明文体积。
加密示例
var keybits = 512;
var modulus = 'xgA9y1LngGIQ6EWVpbo8NqMDj5shPLkBmmJt94cdELzcpIcmVVr2AzytufYJwHTuOJysJqz9+ic5M++T76UYCQ==';
var exponent = 'AQAB';
try {
var encrypted = RSAEncrypt(keybits, modulus, exponent, 'This is a "秘密"!');
console.log(encrypted);
} catch (e) {
console.error(e.stack);
}
构建工具
以下命令均可使用 cnpm 进行替换。
# 安装依赖
npm i
# 启动测试服务器
npm start 8080
# 构建代码
npm run build
License
-
0 Star
-
27 Star
-
110 Star
-
302 Star
-
11200 Star
-
53 Star
-
1989 Star
-
110 Star