美文网首页
前端登陆加密方式RSA+AES

前端登陆加密方式RSA+AES

作者: 林亚希 | 来源:发表于2019-10-17 17:13 被阅读0次

前言

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

想法

主流加密算法


主流加密算法
  • (一)对称加密AES ,其特点是:算法简单,加密速度快;
  • (二)非对称加密方式,代表是RSA加密算法,其特点--采用的一对秘钥机制(即加解密秘钥不同),公钥加密、私钥解密,管理简单,缺点是解密速度慢。


    最终方式

    具体过程是先由接收方创建RSA密钥对,接收方通过Internet发送RSA公钥到发送方,同时保存RSA私钥。而发送方创建AES密钥。并用该 AES密钥加密待传送的明文数据,同时用接受的RSA公钥加密AES密钥,最后把用RSA公钥加密后的AES密钥同密文一起通过Internet传输发送 到接收方。当接收方收到这个被加密的AES密钥和密文后,首先调用接收方保存的RSA私钥,并用该私钥解密加密的AES密钥,得到AES密钥。最后用该 AES密钥解密密文得到明文。

基本流程

请求:

  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)
}

相关文章

网友评论

      本文标题:前端登陆加密方式RSA+AES

      本文链接:https://www.haomeiwen.com/subject/gdemmctx.html