Vue RSA加密和解密

  接到一个需求,需要对我们的密码进行加密,然后再传输。以前搞过,但是不是Vue中的。现在用Vue弄一遍,大致的思路是一样的。如果你还不了解什么是RSA的话,可以看看这个这个。话不多说,首先是安装

1 npm i jsencrypt -D
2 npm i encryptlong -S //encryptlong是基于jsencrypt扩展的长文本分段加解密功能

安装完成之后,需要创建一个rsa.js,为了是方便咱们使用和以后的管理操作。生成一对公钥和密钥

 1 // 密钥对生成 http://web.chacuo.net/netrsakeypair
 2 // 公钥key
 3 const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANL378k3RiZHWx5AfJqdH9xRNBmD9wGD\n' +
 4     '2iRe41HdTNF8RUhNnHit5NpMNtGL0NPTSSpPjjI1kJfVorRvaQerUgkCAwEAAQ=='
 5 // 私钥key
 6 const privateKey = 'MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8\n' +
 7     'mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9p\n' +
 8     'B6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue\n' +
 9     '/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZ\n' +
10     'UBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6\n' +
11     'vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha\n' +
12     '4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3\n' +
13     'tTbklZkD2A=='
14 
15 import JSEncrypt from 'jsencrypt' // 处理长文本数据时报错 jsencrypt.js Message too long for RSA
16 import Encrypt from 'encryptlong' // encryptlong是基于jsencrypt扩展的长文本分段加解密功能。

然后方法的话,其实是一样的

 1 export default {
 2     /* JSEncrypt加密 */
 3     rsaPublicData(data) {
 4         var jsencrypt = new JSEncrypt()
 5         jsencrypt.setPublicKey(publicKey)
 6         // 如果是对象/数组的话,需要先JSON.stringify转换成字符串
 7         var result = jsencrypt.encrypt(data)
 8         return result
 9     },
10     /* JSEncrypt解密 */
11     rsaPrivateData(data) {
12         var jsencrypt = new JSEncrypt()
13         jsencrypt.setPrivateKey(privateKey)
14         // 如果是对象/数组的话,需要先JSON.stringify转换成字符串
15         var result = jsencrypt.encrypt(data)
16         return result
17     },
18     /* 加密 */
19     encrypt(data) {
20         const PUBLIC_KEY = publicKey
21         var encryptor = new Encrypt()
22         encryptor.setPublicKey(PUBLIC_KEY)
23         // 如果是对象/数组的话,需要先JSON.stringify转换成字符串
24         const result = encryptor.encryptLong(data)
25         return result
26     },
27     /* 解密 - PRIVATE_KEY - 验证 */
28     decrypt(data) {
29         const PRIVATE_KEY = privateKey
30         var encryptor = new Encrypt()
31         encryptor.setPrivateKey(PRIVATE_KEY)
32         // 如果是对象/数组的话,需要先JSON.stringify转换成字符串
33         var result = encryptor.decryptLong(data)
34         return result
35     }
36 }

写完之后,还需要把这个方法注册成为全局的方法,这个时候,需要再main.js中添加下面的话

import Rsa from "@/utils/rsa.js"
Vue.prototype.Rsa = Rsa // 将Rsa注册为公共方法,方便其他页面调用

然后就可以使用了。

 1 <template>
 2     <div class="">
 3         <p></p>
 4         <el-input v-model="rasEncryptData.reqStr" placeholder="请输入内容"></el-input>
 5         <el-button icon="el-icon-search" circle @click="reqTest"></el-button>
 6         <el-row>
 7             <el-col :span="24"><div class="grid-content bg-purple">加密的数据:<p>{{rasEncryptData.encryptStr}}</p></div></el-col>
 8             <el-col :span="24"><div class="grid-content bg-purple-light"></div>解密的数据:{{rasEncryptData.decryptStr}}</el-col>
 9         </el-row>
10     </div>
11 </template>
12  
13 <script>
14 export default {
15   data() {
16     // 定义数据
17     return {
18       rasEncryptData: {
19         // 加密后数据
20         reqStr: "", // 加密前数据
21         encryptStr: "", // 加密后数据
22         decryptStr: "" // 解密后数据
23       }
24     };
25   },
26   methods: {
27     // 定义方法
28     reqTest() {
29       this.rasEncryptData.encryptStr = this.Rsa.encrypt(
30         this.rasEncryptData.reqStr
31       ); // 加密
32       this.rasEncryptData.decryptStr = this.Rsa.decrypt(
33         this.rasEncryptData.encryptStr
34       ); // 解密
35     }
36   },
37   mounted() {
38     // 此时已经将编译好的模板,挂载到了页面指定的容器中显示
39   },
40 
41 };
42 </script>
43 <style lang="scss" scoped>
44 p{
45     word-break: break-all;
46 }
47 </style>

 

posted @ 2021-12-03 15:27  程先生哈  阅读(1103)  评论(0编辑  收藏  举报