需要引入两个包
一个是进行加密,解密的:npm install jsencrypt --save
一个是进行签名验证的:npm install jsrsasign --save
加密,解密
在main.js中引入
import JsEncrypt from 'jsencrypt'
挂载在main.js中的加密解密方法
/**
* JSEncrypt 加密
* @param {Object} strIng
* @return {string}
*/
Vue.prototype.$JSEncrypt = function(strIng){
// 实例化一个JSEncrypt对象
let jse = new JsEncrypt();
// 设置公钥(公钥秘钥需自己生成)
jse.setPublicKey(`-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4(假的公钥)
-----END PUBLIC KEY-----`);
// 加密
let encrypted = jse.encrypt(strIng);
return encrypted;
}
/**
* JSEncrypt 解密
* @param {Object} strIng
* @return {string}
*/
Vue.prototype.$decryptData = function(strIng){
let jse = new JsEncrypt();
// 设置秘钥
jse.setPrivateKey(`-----BEGIN RSA PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w(假的秘钥)
-----END RSA PRIVATE KEY-----`);
// 解密加密过的字符串
let decrypted = jse.decrypt(strIng);
// 打印结果
return decrypted;
}
在页面中使用
var a = this.$JSEncrypt('Hello word');
var c = this.$decryptData(a);
console.log('加密生成:'+a);
console.log('解密生成:'+c);
签名生成
import jsRsasign from 'jsrsasign'
/**
* 生成签名
* @param {Object} strIng
* @return {type}
*/
Vue.prototype.$getSignCode = function(strIng){
// 创建RSAKey对象
var rsa = new jsRsasign.RSAKey();
//因为后端提供的是pck#8的秘钥对,所以这里使用 KEYUTIL.getKey来解析秘钥
var signPrivateKey = `-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w(假的秘钥)
-----END PRIVATE KEY-----`
// 将密钥转码,其实就是将头部尾部默认字符串去掉
signPrivateKey = jsRsasign.KEYUTIL.getKey(signPrivateKey);
// 创建Signature对象,设置签名编码算法
// alg:对应的是规则 需要和后端统一
var sig = new jsRsasign.KJUR.crypto.Signature({"alg": "MD5withRSA","prov": "cryptojs/jsrsa","prvkeypem": signPrivateKey});
// 初始化
sig.init(signPrivateKey)
// 传入待加密字符串
sig.updateString(strIng);
// 生成密文
var sign = jsRsasign.hextob64(sig.sign());
// 对加密后内容进行URI编码
// sign = encodeURIComponent(sign);
//把参数与密文拼接好,返回
var params = 'Str='+strIng+'&sign='+sign;
return params;
}
var b = this.$getSignCode('Hello word');
console.log(b);
验证签名
/**
* 验证签名
* @param {String} strIng 签名前的明文
* @param {String} data 签名后的数据
* @return {Boolean} true | false
*/
Vue.prototype.$attestationCode = function(strIng,data){
// 创建RSAKey对象
var rsa = new jsRsasign.RSAKey();
//因为后端提供的是pck#8的公钥对,所以这里使用 KEYUTIL.getKey来解析公钥
var signPublicKey = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqpXgllRE6tZCMmqpocGV6Swf1QrPi5DPry/7D8z7NTW5VbLz+
l2wbi2KLlgzUb6hMvzx/UP/to+
TZvBaKavRaTKm/mdu4/vNrTg3KvZ6DcYa7aYqGNZEjzrwmFPOf1LQ0h5+jSxyIbwhViO7G4HtcmgtjTz0YyHgZyiBiCxQPtwIDAQAB
-----END PUBLIC KEY-----`
// 将公钥转码
signPublicKey = jsRsasign.KEYUTIL.getKey(signPublicKey);
// 创建Signature对象,设置签名编码算法
var sig = new jsRsasign.KJUR.crypto.Signature({"alg": "MD5withRSA","prov": "cryptojs/jsrsa","prvkeypem": signPublicKey});
// 初始化
sig.init(signPublicKey)
// 传入待加密字符串
sig.updateString(strIng);
// !接受的参数是16进制字符串!
let sign = sig.verify(jsRsasign.b64tohex(data));
return sign;
}
var e = this.$attestationCode('Hello word',b);
console.log(e);