前端登陆加密方式RSA+AES

2019-10-17  本文已影响0人  林亚希

前言

为了提高用户登陆的安全性,公司准备整理一份相对安全的登陆模式。

想法

主流加密算法


主流加密算法

基本流程

请求:

  1. 服务器端(server)生成密钥对
  2. server给client自己的公钥
  3. client生成AES密钥(aesKey)
  4. client使用自己的RSA私钥(privateKey)对请求明文数据(params)进行数字签名
  5. 将签名加入到请求参数中,然后转换为json格式
  6. client使用aesKey对json数据进行加密得到密文(data)
  7. client使用sever的RSA公钥对aesKey进行加密(encryptkey)
  8. 分别将data和encryptkey作为参数传输给服务器端

服务器端进行请求响应时将上面流程反过来即可

使用

  1. 安装crypto-js
    npm install crypto-js
  2. AES加密工具类
import CryptoJS from ‘crypto-js’
//创建密钥
export function createAesKey() {
  const expect = 16
  let str = Math.random().toString(36).substr(2)
  while (str.length < expect) {
    str += Math.random().toString(36).substr(2)
  }
  str = str.substr(0, 16)
  return str
}
//aes
export function encrypt(word, keyStr) {
  keyStr = keyStr ? keyStr : 'abcdefgabcdefg12';
  var key = CryptoJS.enc.Utf8.parse(keyStr); //Latin1 w8m31+Yy/Nw6thPsMpO5fg==
  var srcs = CryptoJS.enc.Utf8.parse(word);
  var encrypted = CryptoJS.DES.encrypt(srcs, key, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  });
  return encrypted.toString();
}
//
  1. RSA加密
    npm install jsencrypt
let publickey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiuSQ9WxQqp+j5rpJY+qmAsm2AYPC0Xr4hgEJyEpo8vSh52ITmIby1PvGqztU+T88hP5T3Rlo6J+W6gTgXHbjs/UnKuM+oO2sd/Ox+gjRmLetRil2Iqz0m9rHuTO8FMeulI8VKJ2O4dmXO9XvhFqQ26D4x1LLj8GLO5ZYriCPzUD0hUDqKh/jWj8IUxOO1ooZlaIo915Sbw7P2/JdAISKoivv7KjGJ3DRMq3Vd9sbG3FIHVCIbPuUCoket4Asu4BT51lhTIj3lLxDbYv/350RBl4lWADBsfCHVfPiSQPsCNmD1gfbgMliB6I97NYIc5Jmwnw9OUem39LK9qqrwWptowIDAQAB'
export function RSAencrypt(pas) {
  let jse = new JSEncrypt();
  jse.setPublicKey(publickey);
  return jse.encrypt(pas)
}
上一篇下一篇

猜你喜欢

热点阅读