前端登录RSA加密、加签

489 阅读1分钟

摘要

由于在日常web项目开发过程中,我们可能为了保证用户登录系统的安全性,防止登录信息被不发分子窃取,故而会采用加密算法对数据进行加密,今天就介绍一种比较常见的加密方法:RSA

如何使用

一、引入加密包

用 jsencrypt.js  官网travistidwell.com/jsencrypt/ 在vue文件中引用

    import JSEncrypt from 'jsencrypt/bin/jsencrypt'

在项目开发中,后端通过工具(web.chacuo.net/netrsakeypa…)生成公钥、和私钥,存储在服务器,等登录之前,先通过结果获取公钥pubKey,登录的时候使用pubKey对密码进行加密操作即可。

代码如下:

// 引入JSEncrypt文件
import JSEncrypt from "jsencrypt/bin/jsencrypt";

import CryptoJS from "crypto-js"
import SHA1 from "crypto-js/sha1"

// 加密方法
let RSAencrypt = (pas,publicKey) => {
  // 实例化jsEncrypt对象

  let encryptor = new JSEncrypt();

  // 设置公钥

  encryptor.setPublicKey(publicKey);

  return encryptor.encrypt(pas);
};

//解密方法
let RSAdencrypt = (pas,privateKey) => {
  //实例化jsEncrypt对象

  let decrypt = new JSEncrypt();

  //设置私钥

  decrypt.setPrivateKey();

  return decrypt.decrypt(pas);
};


// 进行抛出 注意这里是抛出 而非默认抛出
export { RSAencrypt, RSAdencrypt,signature};
    

为了保证数据在传输过程中防止被纂改,可以使用数据加签的方式,就是数据在传输之前,先生成一个sign签名,然后再发送给后台接口做数据传输是否丢失的一个校验手段。

import CryptoJS from "crypto-js" 
import SHA1 from "crypto-js/sha1"
// 加签
let signature  = (signData)=> {
  return CryptoJS.enc.Hex.stringify(CryptoJS.SHA1(signData))
};

export {signature};

当数据传输到后台之后,可以通过后台生成的私钥,调用方法decrypt对数据进行解密,从而拿到想要的数据。

同时,后台也需要对数据进行验签操作,保证数据再传输前后的一致性。