RSA加密算法是最經常使用的非對稱加密算法,它既能用於加密,也能用於數字簽名。vue
首先引入jsencrypt算法
npm install jsencrypt --save
複製代碼
在main.js中引入npm
import JsEncrypt from 'jsencrypt'
Vue.prototype.$jsEncrypt = JsEncrypt
複製代碼
將加密解密方法封裝到通用的js內bash
let publicKey = '這裏是封裝的公鑰'
let privateKey = '這裏是封裝的私鑰'
//加密方法
RSAencrypt(pas){
//實例化jsEncrypt對象
let jse = new JSEncrypt();
//設置公鑰
jse.setPublicKey(publicKey);
// console.log('加密:'+jse.encrypt(pas))
return jse.encrypt(pas);
},
//解密方法
RSAdecrypt(pas){
let jse = new JSEncrypt();
// 私鑰
jse.setPrivateKey(privateKey)
// console.log('解密:'+jse.decrypt(pas))
return jse.decrypt(pas);
},
複製代碼
加簽需引入jsrsasignui
npm install jsrsasign --save
複製代碼
在main.js中引入加密
import Jsrsasign from 'jsrsasign'
Vue.prototype.$jsrsasign = Jsrsasign
複製代碼
在封裝的js內定義加簽解籤方法spa
// 加簽(用本身的私鑰對signData進行簽名)
signature (signData) {
// 私鑰加簽
let signPrivateKey = '-----BEGIN PRIVATE KEY-----這裏是私鑰-----END PRIVATE KEY-----';
let sig = new KJUR.crypto.Signature({"alg": "SHA1withRSA", "prov": "cryptojs/jsrsa","prvkeypem": signPrivateKey});
// let rsa = new KJUR()
// rsa = KEYUTIL.getKey(privateKey)
var hashAlg = 'sha1'; // 設置sha1
var sign = sig.signString(signData, hashAlg); // 加簽
sign = hex2b64(sign);
// console.log(sign)
return sign;
},
// 驗籤 用公鑰對簽名進行驗籤
verify (signData, data) {
// signData: 加簽的數據
// data: 加簽以後獲得的籤文
try {
let signPublicKey = '-----BEGIN PUBLIC KEY-----這裏是公鑰-----END PUBLIC KEY-----';
let sig = new KJUR.crypto.Signature({"alg": "SHA1withRSA", "prov": "cryptojs/jsrsa","prvkeypem": signPublicKey});
sig.updateString(signData);
let result = sig.verify(data);
// console.log(result)
return result;
} catch(e) {
console.error(e);
}
}
複製代碼
特別提醒:加簽驗籤時,公鑰和私鑰都須要加入頭尾'-----BEGIN PUBLIC KEY-----這裏是公鑰-----END PUBLIC KEY-----'prototype