说明:为防止私钥泄漏,由服务端生成两对密钥,分别是(前端公钥+私钥,后端公钥加私钥),采用加解密模式为:前端使用后台公钥加密,使用前端私钥解密;后端使用前端公钥加密,使用后端私钥解密。前后端统一使用公钥加密,私钥解密

一、现在vue项目中安装依赖包jsencrypt

  npm install jsencrypt --save-dev

二、在项目中新建jsencryptKey.js,用来存放公共加解密方法

三、jsencryptKey.js内引入依赖jsencrypt.js

      

四、加解密方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

//加密

//str 未加密字符串

export function getEncryCode(str){

    //实例化JSEncrypt

    let jse = new JSEncrypt();

    //加密公钥(由服务端生成)

    let pubKey = `-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmBjTNoNbIjrZVoEt5OBNM6zZ/

yDZ7wgv53A6ekTuAsqfJ3jXmLC7PqqrJxgqqDf2l72CnRC8ZxIAkiUBmIK/FIDrl

qCBPl1h0Ym8qPLmUuv5l3xmhlb6+a/v22444PW/U6Ur0l1BvbCorrsWV3leFFfLZ

5oT4mq9jXzkQLv8F6wIDAQAB

-----END PUBLIC KEY-----`

    jse.setPublicKey(pubKey);

    let  data = jse.encrypt(str.toString());  // 进行加密

    return data;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

//解密

//params 待解密字符串

export function sendEncryCode(params){

    //实例化JSEncrypt

    let jse = new JSEncrypt();

    //使用前端私钥解密(私钥由服务端生成)

    let privKey = `-----BEGIN PRIVATE KEY-----

    MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKYGNM2g1siOtlWg

    S3k4E0zrNn/INnvCC/ncDp6RO4Cyp8neNeYsLs+qqsnGCqoN/aXvYKdELxnEgCSJ

    QGYgr8UgOuWoIE+XWHRibyo8uZS6/mXfGaGVvr5r+/bbjjg9b9TpSvSXUG9sKiuu

    xZXeV4UV8tnmhPiar2NfORAu/wXrAgMBAAECf0qUfyPgHJv7f+z3FPBfQExNXS4J

    wm/Vu4uCTw7sLs6hcr48E/pR3rVq9U2uqRu7LTZdUg3Rk1b/7pB7F3LJPCuX5n/t

    nqcEWfWoyAc6wnVLffxkvx7toD7nMl7+2/LsUgSiY/QFdG43dKs+5rXuEOOwcZV/

    tLdivN9SEN44mEECQQDXls/rpMPYnd0IHHqh6YZEA3dH1CZAWeW/4XF/BINW/02m

    jtoNr+sTcZN9ekaLFTQnF/jJRi35dNwGhroG+k/hAkEAxST9oYDugGPTbu81JU1p

    nO8tLQPHvpVu3lGQEFahWZi6j70FlhNEhX74lDLrhvTOI4ohzHX28pU5TbQkiyl/

    SwJBALxQseHmFGR80HurVLtlnrB+TozhlWAUpolLRbZrnMY7T/qzQWk/Rxm+1dR/

    IGuQ4/NaDyjRMot6Nk9FE+3QbEECQQCXib+MDVdHSXSUqTro2YB9KTxIhcdcL/Fw

    4rEiXfTYshV1t447tcPN+bOJ9zokGrj5iIxCZcrU3O+XUwlkDxnRAkArwYiJZFlS

    Lu9zj+e03+kGWu6c/x8RRoLqfZcWFffBZlkxOHa06aN6jYCdJtRON43JUbynMvDY

    l5glkcwnZlbi

    -----END PRIVATE KEY-----`

    jse.setPrivateKey(privKey);

    let data = jse.decrypt(params); //解密

    

    return data;

} 

五、使用rsa加解密过程中会出现待加密和待解密字符串过长情况,需要用到分段加解密

  需要进入依赖包中修改jsencrypt.js 文件中方法,具体方法如下: 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

//分段加密

JSEncrypt.prototype.encryptLong = function (string){

    var k = this.getKey();

    // var maxLength = (((k.n.bitLength() + 7) >> 3) - 11);//117

    try {

        var lt = "";

        var ct = "";

        //RSA每次加密117bytes,需要辅助方法判断字符串截取位置

        //1.获取字符串截取点

        var bytes = new Array();

        bytes.push(0);

        var byteNo = 0;

        var len, c;

        len = string.length;

        var temp = 0;

        for (var i = 0; i < len; i++) {

            c = string.charCodeAt(i);

            if (c >= 0x010000 && c <= 0x10FFFF) {

                byteNo += 4;

            else if (c >= 0x000800 && c <= 0x00FFFF) {

                byteNo += 3;

            else if (c >= 0x000080 && c <= 0x0007FF) {

                byteNo += 2;

            else {

                byteNo += 1;

            }

            if ((byteNo % 117) >= 114 || (byteNo % 117) == 0) {

                if (byteNo - temp >= 114) {

                    bytes.push(i);

                    temp = byteNo;

                }

            }

        }

        //2.截取字符串并分段加密

        if (bytes.length > 1) {

            for (var i = 0; i < bytes.length - 1; i++) {

                var str;

                if (i == 0) {

                    str = string.substring(0, bytes[i + 1] + 1);

                else {

                    str = string.substring(bytes[i] + 1, bytes[i + 1] + 1);

                }

                var t1 = k.encrypt(str);

                ct += t1;

            };

            if (bytes[bytes.length - 1] != string.length - 1) {

                var lastStr = string.substring(bytes[bytes.length - 1] + 1);

                ct += k.encrypt(lastStr);

                // debugger;

            }

            return hex2b64(ct);

        }

        var t = k.encrypt(string);

        var y = hex2b64(t);

        return y;

    catch (ex) {

      return false;

    }

  }

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

//分段解密长字符串

JSEncrypt.prototype.decryptLong = function (text) {

    // Return the decrypted string.

    // console.log(this);

    var k = this.getKey();

    var maxLength = ((k.n.bitLength() + 7) >> 3);

    try {

        var str = b64tohex(text);

        //var b=hex2Bytes(str);

        var inputLen = str.length;

        var ct = "";

       

        if (inputLen > 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(b64tohex(string));

        return y;

        }

    catch (ex) {

        return false;

    }

};

 如果使用分段加密,别忘记修改jsencryptKey.js中引用的加解密方法

  

六、在公共请求js中引入方法并调用

备注:使用rsa对大段接口参数进行加解密会大大降低接口请求及回调速度,不建议使用,推荐使用AES非对称加解密,稍后会整理发出来

VUE内使用RSA加解密相关推荐

  1. 前后端java+vue 实现rsa 加解密与摘要签名算法

    RSA有两个密钥,一个是公开的,称为公开密钥:一个是私密的,称为私密密钥. 特点: 公开密钥是对大众公开的,私密密钥是服务器私有的,两者不能互推得出. 用公开密钥对数据进行加密,私密密钥可解密:私密密 ...

  2. vue前端使用jsencrypt RSA 加解密插件

    1.安装 npm install jsencrypt 2.生成RSA公钥私钥 可以通过在线网站生成: http://web.chacuo.net/netrsakeypair 3.建立加解密工具类 // ...

  3. 使用Crypto++5.5.2完成RSA加解密,真正的把公钥放在字符串内,而不是放在文件内

    本文摘自 小楼一夜听春雨得博客: http://hi.baidu.com/magic475/blog/item/e8b82139020ae622b8998f96.html 使用Crypto++5.5. ...

  4. RSA加解密用途简介及java示例

    在公司当前版本的中间件通信框架中,为了防止非授权第三方和到期客户端的连接,我们通过AES和RSA两种方式的加解密策略进行认证.对于非对称RSA加解密,因为其性能耗费较大,一般仅用于认证连接,不会用于每 ...

  5. RSA加解密算法原理

    本文译自http://www.muppetlabs.com/~breadbox/txt/rsa.html,作者Brian Raiter. This article is translated from ...

  6. RSA加解密及RSA签名验证

    工作中用到了非对称加密:RSA加解密及签名验证,根据查到的信息及工作中的问题总结,现在整理如下: 1. 准备好公钥和私钥,使用openssl工具生成RSA公钥和私钥对 1)生成RSA私钥: genrs ...

  7. 介绍一个很好用的Rsa加解密的.Net库 Kalix.ApiCrypto

    Rsa非对称加密技术 这个就不说了,大家上网搜索都知道,公钥加密,私钥解密.当然大家也可以自己实现.这里就懒了,就去找一个现成的库,Nuget上搜索,GitHub上搜索,发现.Net的加解密库,下载量 ...

  8. python3 RSA加解密

    python3 可以使用 Crypto.PublicKey.RSA 和 rsa 生成公钥.私钥. 其中 python3.6 Crypto 库 使用 pip3 install pycryptodome ...

  9. Crypto++库在VS 2005中的使用——RSA加解密

    Crypto++库在VS 2005中的使用--RSA加解密 源代码:下载 一.   下载Crypto++ Library Crypto++ Library的官方网:http://www.cryptop ...

最新文章

  1. 【解决方案】Monkey-patching ssl after ssl has already been imported may lead to errors
  2. mysql 活跃事务_MySQL日志与事务
  3. App设计灵感之十二组精美的数据图表展示App设计案例
  4. CSS大会 | 打破常“规”:挖掘语法解析器规则漏洞
  5. video.js html5 视频播放器
  6. Java创新型模式_java设计模式--创建型模式(一)
  7. java技术简介英文_Java技术常见的英文缩写
  8. Fail to get tape drive(tsm) inventory
  9. Magnet for mac(窗口布局辅助工具)
  10. 马悦凌:从初级护士到“民间奇医”[9]
  11. 关于kdb_trap_immed函数中$1号中断的详解(来自liujian)
  12. C++ 单例模式-打印机案例
  13. 《谷物大脑》书中的精髓:如何通过四星期行动计划打造健康身体?
  14. Django如何自定义DTL过滤器?
  15. 从接口、抽象类到工厂模式再到JVM来总结一些问题
  16. 人无自信当废人无自信而不立
  17. paper weekly_Java Weekly 24/15:JCache,Hibernate OGM,微服务
  18. telegram机器人开发3-最简单的代码
  19. java-Stringbuffer
  20. java二维数奇数组金字塔_金字塔内神秘的数字~世界末日真的存在?

热门文章

  1. linux内核进程调度—scheduler_tick函数解析
  2. 圣诞季来袭,看各大品牌如何打造精致又温情的圣诞限定
  3. O2OA后端代码调试
  4. 认证机制强化个人信息保护,促进数据合规利用
  5. 深度技术解读:Fomo3D 游戏第一轮是如何结束的
  6. 索迪斯完成收购上海拓美医疗;温瑞通推出创新产品 Releye RAP温控集装箱 | 医药健闻...
  7. Linux系统编程37:多线程之什么是临界区和临界资源以及如何使用mutex互斥锁
  8. jstl中fn表达式
  9. 收集Oracle备份恢复信息
  10. 【计算机毕业设计】703学生考勤管理系统