什麼是RSA
RSA加密演算法是最常用的非對稱加密演算法,它既能用於加密,也能用於數字簽名。
在vue中使用加密
首先引入jsencrypt
npm install jsencrypt --save
複製程式碼
在main.js中引入
import JsEncrypt from 'jsencrypt'
Vue.prototype.$jsEncrypt = JsEncrypt
複製程式碼
將加密解密方法封裝到通用的js內
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);
},
複製程式碼
在vue中使用加簽
加簽需引入jsrsasign
npm install jsrsasign --save
複製程式碼
在main.js中引入
import Jsrsasign from 'jsrsasign'
Vue.prototype.$jsrsasign = Jsrsasign
複製程式碼
在封裝的js內定義加簽解籤方法
// 加簽(用自己的私鑰對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-----'