美文网首页
前端登陆加密方式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