在VUE中使用RSA加密解密加簽解籤

丿歌頌者發表於2018-12-29

什麼是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-----'

相關文章