前言:

什么是非对称加密?什么是对称加密?

对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

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

工作流程?

我这边就分为前后端来阐述:

  1. 首先,我在后端生成一对密钥(公钥和私钥)并将公钥向其前端公开。

  2. 然后,前端得到公钥后,使用该公钥对咬进行加密的信息进行加密(比如账户密码),加密后将加密的信息再传给后端

  3. 后端根据自己保存的另一把专用密钥(私钥)对加密后的信息进行解密,就能得到原信息,这边后端只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。

  4. 这样即使攻击者截获了传输的密文,并得到了前端的公钥,也无法破解密文,因为只有后端保存的私钥才能解密密文
    这是相对比较安全的做法。

实操

这边我前端部分采用的是jsencrypt包,我这边是使用Vue脚手架,所以示例代码也是脚手架的

前端部分

先安装个依赖包

npm install jsencrypt --save

然后引入

import JSEncrypt from 'jsencrypt/bin/jsencrypt'

使用它

let $JSEncrypt  = new JSEncrypt()   // 创建实例// 后端给的公钥
let pubKey =
`-----BEGIN PUBLIC KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END PUBLIC KEY-----`this.$JSEncrypt.setPublicKey(pubKey) // 设置公钥// 将加密的密文传给后端
let res = await API$login({account: $JSEncrypt.encrypt(this.account),  // 要加密的内容pwd: $JSEncrypt.encrypt(this.pwd)          // 要加密的内容
});

杂:前端解密过程

this.$JSEncrypt.setPrivateKey(privateKey)
let getWord = this.$JSEncrypt.decrypt(rsaPassWord) // 解密
console.log(getWord) // 输出,可以在控制台看到解密得到的字段
然后后端要解密密文做判断

后端我这边用的是nodeJS
安装依赖包

npm install node-jsencrypt --save

这边不用装前端的那个依赖包,会报错,因为那个包只支持游览器环境

使用它

const jsencrypt = require("node-jsencrypt");
const $JSEncrypt = jsencrypt();
let priva   teKey =`-----BEGIN PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-----END PRIVATE KEY-----`
$JSEncrypt.setPrivateKey(privateKey)console.log($JSEncrypt.decrypt(account))    // 解密内容
console.log($JSEncrypt.decrypt(pwd))        // 解密内容

前端端使用非对称加密解密相关推荐

  1. java rsa 117_java实现RSA非对称加密解密

    之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...

  2. 服务端与客户端加密解密思路

    服务端与客户端加密解密思路 我的参考 我的理解 我的参考 源码编码 文档思路 我的理解 AES 对称加密,即加密解密使用共同的key AES是DES的升级版 RSA 非对称加密,即加密解密使用一对不同 ...

  3. java大话西游单机版,【大话西游】手工架设服务端+双客户端+加密解密全套工具...

    [大话西游]手工架设服务端+双客户端+加密解密全套工具_站长网(Downzz.com) 安装说明: 服务器系统 Windows Server 2008 R2 1.首先第一步把需要的运行工具以及所需工具 ...

  4. 工具类:登录密码的加解密(jsencrypt实现前端RSA非对称加密解密

    定义工具类:utils/jsenscrypt.js import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'// 密钥对生成 http://web.cha ...

  5. API接口加密—非对称加密解密之分段加解密

    引言: 对称加密:双方使用的同一个密钥,既可以加密又可以解密,这种加密方法称为对称加密,也称为单密钥加密. 优点:速度快,对称性加密通常在消息发送方需要加密大量数据时使用,算法公开.计算量小.加密速度 ...

  6. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 [cp ...

  7. html前端的几种加密/解密方式

    一.base64加密 前端用base64加密和解密的使用方法,只需要两个函数就可以了.一个是加密:window.btoa(),一个是解密:window.atob(),看例子: var str = &q ...

  8. RSA非对称加密解密概念

    1.RSA加密解密在线计算网站 网站1:https://www.bejson.com/enc/rsa/ 网站2:https://the-x.cn/cryptography/Rsa.aspx 2.PKC ...

  9. 前端使用pako.js加密解密

    之前在网上搜到的关于pako加密解密方法,其中加密方法有点问题,和解密方法不配套. 整理了下我自己最后修改的代码 zip = (str) => { let binaryString = pako ...

  10. php 如何使用openssl_encrypt进行aes非对称加密解密

    一.DES介绍 DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.密钥长度是64位(bit),超过位数密钥被忽略. ...

最新文章

  1. nginx_lua_waf安装测试
  2. 算法导论一个让人很不爽的地方
  3. 10_隐马尔科夫模型HMM1_统计学习方法
  4. c#操作json 使用JavaScriptSerializer
  5. pyspark分类算法之决策树分类器模型实践【decisionTreeClassifier】
  6. 20200128每日一句
  7. 网络安全学习--WEB服务器
  8. python解析器下载_pak文件解析-pak文件解析工具下载Python版-西西软件下载
  9. matlab利用gui谐波分析,matlab中fft谐波分析
  10. 笔记本电脑没有Pause键,远程桌面无法全屏
  11. 费马小定理费马大定理
  12. ROS系统下完成TCP通信 C语言编程
  13. SikuliX教程-下载与安装
  14. 学习笔记之09for循环8个小练习
  15. 对云计算机的想法,我对云计算技术的看法
  16. 2021年--中国工商银行软件开发中心--社会招聘(春季)
  17. Cesium中文教程-3D模型(3D Models)
  18. Linux嵌入式系统简答题复习
  19. CISSP认证流程1
  20. [人生]一些人生智慧

热门文章

  1. python绘制中国_如何用Python画一个中国地图?
  2. 《三国空城计》何为真知己真智慧
  3. Pytorch基础知识之pth文件与DataLoader数据加载器
  4. Zotero安装与同步配置(PC+ipad双平台)
  5. 我的日程安排表(理解代码)学习记录Java
  6. 清蒸野猪佩奇自带LastDance
  7. 【嵌入式系统开发12】在stm32F103C8T6环境下,用HAL库,采用中断模式编程,控制LED的高亮与熄灭
  8. ubuntu 20.04 设定固定IP地址碰到的坑
  9. 利用webmagic爬去招聘信息,并输入到Hbase数据库中
  10. 断点续传视频无法播放问题,合块发现视频无法播放