背景:项目涉及密码操作在向后端传输时是明文传输,不太安全,需要加密
在使用jsencrypt之前需要浅浅了解一下原理:
RSA加密算法是一种非对称加密算法,RSA加密使用了"一对"密钥.分别是公钥和私钥;一般是公钥加密,私钥解密。到这里其实就够开发使用了
首先我们需要有这两个密匙:
方式一:使用 openssl 生成密匙(需安装使用)
方式二:使用在线网站生成(可测试)===> metools
使用RSA加密:(需要公钥)
import JSEncrypt from 'jsencrypt'
// RSA加密
RSA(data) {
const encryptor = new JSEncrypt() // 实例
encryptor.setPublicKey( 'RSAKey' ) // 设置公匙
return encryptor.encrypt(data) // 进行加密并返回加密后的字符串
}
解密(需要私钥)
import JSEncrypt from 'jsencrypt'
// RSA解密
RSA(data) {
const encryptor = new JSEncrypt() // 实例
encryptor.setPrivateKey( 'RSAKey' ) // 设置私匙
return encryptor.decrypt(data) // 进行加密并返回解密后的字符串
}
问题:返回值为false
一、openssl生成的密匙可能会有格式问题,需要转化一下格式PKCS#1和PKCS#8
二、当字符串太长会有返回false的问题,提供一个处理长文本的方式:npm安装一个encryptlong
他会提供两个方法处理长文本
encryptLong()
长文本加密decryptLong()
长文本解密
更多可以去此网站了解(含案例):encryptlong - npm (npmjs.com)
注:加密的值不能为空,空值也会返回false
vue登录实例:
<script>
import JSEncrypt from 'jsencrypt'
export default {
name: 'Test',
data() {
return {
userName: '张三',
passWord: '123456',
RSAKey: '公匙'
}
},
methods: {
// RSA加密
RSA(data) {
const encryptor = new JSEncrypt()
encryptor.setPublicKey(this.RSAKey)
return encryptor.encrypt(data)
},
// 登录方法
longin() {
const form = {}
form.userName = this.RSA(this.userName)
form.passWord = this.RSA(this.passWord)
请求(form).then(res => {
// 处理。。。
})
}
}
}
</script>