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>