前端RSA加解密 jsencrypt.js

jsencrypt.js 分段以及不分段加解密

如果所用的key为128位,则只能加密117bytes,因此,有时候我们需要分段加密解密

使用jsencrypt 不分段加解密

  1. 引入 jsencrypt.js
// 引入  jsencrypt.js

import JsEncrypt from "jsencrypt/bin/jsencrypt.js";
  1. 获取公钥
    一般为从后台接口获取公钥
//  接口获取公钥
let publicKey = ' MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCNC18+lr+E8eRy267pgQ0+4D+VoQMusq70Ujf5eXHvJTtc7XECTCJWSJBSYb3QGojvj6SC7bHuBNz3M0caiaHdS3y+YwLAa1q5oWR+6YSUFFqPXcZamUymE3T6lBD/AR56RApe5WAUcMDHy33IUJTKLQnZJQcfzrPQ0EgK/tuwSQIDAQAB '
  1. 使用 JsEncrypt
//  1. 创建JsEncrypt 对象
let jse =  new JsEncrypt()
//  2. 给jse对象设置publicKey
jse.setPublicKey( publicKey)
//  3. 从表单拿到密码并加密
let encryptPw =  jse.encrypt(this.loginForm.password)
  1. 完整方法
// 加密
 /**
     * encrypt  string
     * @param string
     * @returns {*}
     */
function rsaEncrypt(str,publicKey){
    let enJse = new JSEncrypt();
    str.setPublicKey(publicKey);
   ley encryptStr = str.encrypt(str);
    return encryptStr ;
}

// 解密
 /**
     *decrypt  string
     * @param string
     * @returns {*}
     */
function rsaDecrypt(str,publicKey){
    var deJse = new JSEncrypt();
    deJse .setPrivateKey(publicKey);
    var decryptStr = deJse .decrypt(msg);
    return decryptStr ;
}

使用jsencrypt 分段加解密

  1. 分段加密

//  在JsEncrypt原型上写了分段加密方法 encryptLong 使用时替换encrypt方法即可
JsEncrypt.prototype.encryptLong = function (string) {
  var k = this.getKey();
  var maxLength = (((k.n.bitLength() + 7) >> 3) - 11);

  try {
    var lt = "";
    var ct = "";

    if (string.length > maxLength) {
      lt = string.match(/.{1,50}/g);
      lt.forEach(function (entry) {
        var t1 = k.encrypt(entry);
        ct += t1;
      });
      return hex2b64(ct);
    }
    var t = k.encrypt(string);
    var y = hex2b64(t);
    return y;
  } catch (ex) {
    return false;
  }
};
  1. 分段解密
// //  在JsEncrypt原型上写了分段加密方法 encryptLong 使用时替换decrypt方法即可
JSEncrypt.prototype.decryptLong = function (string) {
    var k = this.getKey();
    var maxLength = ((k.n.bitLength() + 7) >> 3);
    //var maxLength = 128;
    try {

        var str = bytesToHex(string);
        //var b=hex2Bytes(str);

        var inputLen = str.length;

        var ct = "";
        if (str.length > maxLength) {

            var lt = str.match(/.{1,256}/g);
            lt.forEach(function (entry) {
                var t1 = k.decrypt(entry);
                ct += t1;
            });
            return ct;
        }
        var y = k.decrypt(bytesToHex(string));
        return y;
    } catch (ex) {
        return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值