RSA非对称加密传输---前端加密&解密(VUE项目)

一.什么是RSA非对称加密

实际开发过程中,后台生成一对公私钥,私钥存在服务器,把公钥给前端,前端加密后传给后端,这是相对比较安全的做法。

就好像是:
由后台B生成一对公钥和私钥存好,公钥就好比一把锁,钥匙就是私钥。后台B只需要把锁给前台A,前台A把那句话锁起来,交还给后台B,在这过程中,即使大家都能在浏览器看到前台A传过来的公钥(锁),但不知道那句话是啥的,然后B拿到锁好的机密,拿只有自己才有的私钥(钥匙)解开,这个差不多就是非对称加密。

二.使用jsencrypt.js

官网:http://travistidwell.com/jsencrypt/

1.安装

npm install jsencrypt

2.在vue中引用

import JSEncrypt from 'jsencrypt/bin/jsencrypt'

三.demo走下全过程

1.首先,你得有一对公钥和私钥

有在线生成器,我们先来生成一对 http://web.chacuo.net/netrsakeypair

在这里插入图片描述

2.模拟一下前端的加密

let encryptor = new JSEncrypt() // 新建JSEncrypt对象
 
let publicKey = `MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHGBAi30CuorD71ddAY5Pj80a2
    FinTK6CJrX3LJZ5FTxJrQdzxbwDVB2mDVgspU5oz7X03TzgWFKkkJm2b4g9G00sA
    +G9oeGaR+rpFaoDr4BxW+AUd6V1Ps/OkTaLc473XOA0aYTRIwo1Ob3pTJd9Za90e
    +NRk0c07Vb/mcr0w1QIDAQAB`  //把之前生成的贴进来,实际开发过程中,可以是后台传过来的
 
encryptor.setPublicKey(publicKey) // 设置公钥
 
let rsaPassWord = encryptor.encrypt('我我我我') // 对需要加密的数据进行加密
 
console.log(rsaPassWord)   //得到加密后的数据

A已经加完密,得到RSA加密后的字符串rsaPassWord。

3.模拟一下B的解密

假设已经拿到了这段rsaPassWord,存为secretWord 。只有B才有的私钥privateKey。

 let decrypt = new JSEncrypt() // 新建JSEncrypt对象
 
 let secretWord = 'KfAfOvSSpucpY0YObjdUhzzpSzFulFIFrYwyZ2oACMw9D3emJeWGa5BefU85EVDVLvpZaqug0vdwDSNXLgbhpW1ep1IP3VQwa6f8Q4TLeZepAtqGHkq+J+4vCt4WW2bE2z36bzRHM36H2xC8H2gmMe4EjHAGkmnRxuARQauebXE='
 
 let privateKey = 'MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMcYECLfQK6isPvV\n' +
      '10Bjk+PzRrYWKdMroImtfcslnkVPEmtB3PFvANUHaYNWCylTmjPtfTdPOBYUqSQm\n' +
      'bZviD0bTSwD4b2h4ZpH6ukVqgOvgHFb4BR3pXU+z86RNotzjvdc4DRphNEjCjU5v\n' +
      'elMl31lr3R741GTRzTtVv+ZyvTDVAgMBAAECgYBYLX4oE7zwG7pLL4CwUeoUUZEF\n' +
      '4HcRwgbOM3q9WKHqjITZ4Efc3o79ytSeiKNU4GQxj4Of1YQ/s1LeYe611b9xlNQQ\n' +
      'cU4Kbbt+w1IkcFmWNwvBtcZbkjaWqEOs1r8U1ZKQWjYzOaIu+uHP0U166Nnwh4Gg\n' +
      'NFFc+yCwjKK1Jz7xQQJBAOnzE7vEVZ0LcdCHw66EABov07i9NSMX07AvuSk+0jRP\n' +
      '1c3zyiohKjecX4JI3hovJVg4DF3XO9sl0xiNQ6HMwB0CQQDZ2/a3ArVVwZIXGoBx\n' +
      'O24NRnwAZV9t7p7c0I5kBEODdcj/N5ZiztB2J64A/aGC9UjcXJhY9/ZsIozmS5R1\n' +
      'SMYZAkA2mVtOpAiTCTu7viOmE/puIiFYaRgAo6vs34ZoINgwCz3Lvgy9flX6+oyz\n' +
      'vEvRcpVVnGcOc4/tmktE3JsfJMjlAkEAk76t4U0v5vmAdrSdWK1CJDSh0a7t+eKy\n' +
      'z/OMLV4K3zNY3WQ4U8gH7alZQwi+qM5p3C/bjbKT5p/DyEaHZsa0uQJAJvIbxT8c\n' +
      'Uf57g7auIRpJlHN6nYuNa+/gi0e135GxRmOe5ft1TuGWTbsQz8aZW/mKk7y+OlC1\n' +
      'M6riL/WE1sb23Q=='
 
  decrypt.setPrivateKey(privateKey)
 
  let getWord = decrypt.decrypt(secretWord) // 解密
 
  console.log(getWord) // 输出,可以在控制台看到解密得到的字段

转载:https://blog.csdn.net/weixin_42423019/article/details/82468626

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值