vue+node使用RSA非对称加密,实现登录接口加密密码

背景

登录接口,密码这种重要信息不可以用明文传输,必须加密处理。

这里就可以使用RSA非对称加密,后端生成公钥和私钥。

公钥:给前端,公钥可以暴露出来,没有影响,因为公钥加密的数据只有私钥才能解密。

私钥:留在后端,用于解密。

实现

 一、后端生成公钥私钥

node可以直接使用【crypto】模块,利用如下代码即可完成公钥和私钥的生成,和数据的加解密,代码均有注释:

const { generateKeyPairSync } = require('crypto')
const { publicEncrypt, privateDecrypt } = require('crypto')// 配置
const { publicKey, privateKey } = generateKeyPairSync('rsa', {modulusLength: 1024,publicKeyEncoding: {type: 'spki',format: 'pem'},privateKeyEncoding: {type: 'pkcs8',format: 'pem'}
})// 生成密钥
const pub = publicKey.toString()
const pri = privateKey.toString()
console.log('---------------公钥--------------\n' + pub)
console.log('---------------私钥--------------\n' + pri)// 需要加密的数据
const data = 'hello world'// 公钥加密
const encryptData = publicEncrypt(pub, Buffer.from(data)).toString('base64')
console.log('加密后:', encryptData)// 私钥解密
const decryptData = privateDecrypt(pri, Buffer.from(encryptData.toString('base64'), 'base64'))
console.log('解密后:', decryptData.toString())

效果如下:

公钥:

私钥:

加解密情况:

二、前端使用公钥加密

前端vue加密很简单,这里模拟下获得后端的公钥,然后加密密码

import {publicEncrypt} from 'crypto'function login (password) {// 密码rsa公钥加密(password是密码原文,passwordRsa为加密后数据)var passwordRsa = publicEncrypt(base.rsa_public_key,Buffer.from(password)).toString('base64')// 然后使用passwordRsa作为密码的参数执行登录接口......
}

三、后端使用私钥解密 

1、后端这里也是模拟生成了私钥,然后可以封装个工具类【cryptoRsa.js】用于解密,可以通过返回的结果code,判断解密是否成功(如果不是对应的公钥加密的数据,都会提示解密失败):

const { privateDecrypt } = require('crypto')// 解密-这里的PrivateKey是模拟生成的私钥
function decryption (data) {try {const dataDecry = privateDecrypt(PrivateKey, Buffer.from(data.toString('base64'), 'base64'))// 返回结果return JSON.stringify({code: 200,data: dataDecry})} catch (e) {// 返回错误return JSON.stringify({code: 500,data: e})}
}module.exports = {decryption
}

2、后端登录接口,调用工具类进行判断是否解密成功,然后才决定是否执行下一步。

const cryptoRsa = require('../utils/cryptoRsa')function login (pwd) {// rsa解密密码var rsaCode = JSON.parse(cryptoRsa.decryption(pwd)).codevar rsaData = JSON.parse(cryptoRsa.decryption(pwd)).data// 判断密码是否合法if (rsaCode === 200) {// 解密后的真实密码var password = Buffer.from(rsaData).toString() // 进行密码比对......} else {// 密码不合法......}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/1717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不同分辨率下搜狗输入法输入图标过大

现象 笔记本是2k屏外接1080p显示器,分辨率不同导致搜狗输入法在笔记本显示器上显示正常,而在1080p显示器下图标很大过大,一打字就显得很尴尬。 解决 找到以上三个可执行文件,分别右键打开属性-->兼容性-->更改高DPI设置 按…

安装nvm管理node版本

准备工作 卸载电脑上原有的nodejs,卸载后确保相关的文件夹也删除掉,否则会在nvm安装成功后管理node版本时造成冲突,例如执行nvm use 20.5.0时报exit status 145的错误。原本就没有安装过node的不用管 一、nvm的安装及使用 1、下载nvm&…

SS-Net复现

表1 8 labeled 样本复现结果–Dice:88.540501,Jaccard:79.60452,95HD:7.58588897,误差在可接受范围内 表2 7 labeled 样本复现结果–Dice:86.778431,Jaccard:77.665895&…

算法思想总结:栈

一、栈的经典应用:波兰表达式与逆波兰表达式 我们平时看到的 12*(3-4*5)6/7 叫做中缀表达式,平时我们习惯用这个计算的原因是我们可以整体地去看到这个表达式并且清楚地知道各个运算符的优先级,但是计算机并不一定知道…

微信小程序四(全局配置和页面配置页面跳转)

全局配置: 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等 tabBar设置:最少两个最多5个 "tabBar": {"list":[{"pagePath": &qu…

“饕餮之路:贪吃蛇编程精粹“

目录 前言 1.写代码前的预准备 1.1修改控制台 1.2相关WinAPI32知识学习 1.2.1WinAPI32介绍 1.2.2 mode 命令 1.2.3 title 命令 1.2.4COORD 1.2.5GetStdHandle 1.2.6对控制台光标进行设置 1.2.6.1GetConsolrCursorInfo 1.2.6.2 CONSOLE_CURSOR_INFO 1.2.6.3SetConsol…

vos3000外呼系统客户端无法安装如何解决?

如果 VOS3000 外呼系统客户端无法安装,可以尝试以下解决方法: 检查系统要求: 确保你的计算机满足 VOS3000 外呼系统客户端的系统要求,包括操作系统版本、内存、处理器等。如果系统不符合要求,可能会导致安装失败或者运…

c语言中,数组取地址的书写格式

数组取地址 为了更好的区分数组取地址时的情况,我们建立两个数组,arr1一维数组和arr2二维数组,用printf函数来打印出每个例子arr1和arr2的地址,这样可以更加直观的区分出来。 首先我们看到第一组打印,可以看到若是直接…

Qt图片等资源管理

Qt的图片等资源管理通常有两种方式 1,直接将图标和一些配置文件打包在可执行程序中 添加qrc文件,可使用qtcreator直接添加 右键选中工程 点击选择即可。 然后添加文件。我这个例子是添加了Image文件夹下的图片资源 使用的时候,可以在代码…

TCP/IP协议(二)

一、TCP-选项 1.简介 在TCP/IP报文中,固定头部下边就是 "选项"部分。 (1)TCP头部的选项部分是TCP为了适应复杂的网络环境和更好的服务应用层而进行设计的 (2)大多数的TCP选项部分出现在TCP连接建立阶段 2.构成 2.1 最大报文传输段 最大报文传输段(Ma…

Java面试八股之简述Servlet体系结构

简述Servlet体系结构 Servlet是Java Web开发中的核心组件,用于接收和响应HTTP请求,生成动态内容。它具有平台无关性、协议无关性和动态内容生成能力,遵循明确的生命周期。尽管现代Web开发中更多使用高级框架,但Servlet作为基础&a…

【SAP ME 18】SAP ME创建开发组件ear

1、说明 SC开发组件ear项目是所有sap me二次开发项目的编译入和部署入口,通过ear可以有效的针对子项目的编译和部署 2、创建开发组件

【MATLAB源码-第190期】基于matlab的32QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境: MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术,作为一种高效的调制方案,能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…

云打印怎么下单?网上云打印下单教程来了!

近些年来,随着移动互联网的发展,云打印也越来越火热。如今有越来越多的用户选择云打印服务。但是现在仍有很多不知道如何下单。那么云打印怎么下单呢?今天小易就来和大家介绍一下网上云打印的下单教程。 云打印怎么下单?网上云打印…

MYSQL45道练习题---持续更新中

来源: Mysql_45道练习题 - 简书 共四张表: ①、course表: CId:课程id Cname:课程名称 TId:老师id ②、student学生表: SId:学生id Sname:…

【Linux】进程的程序地址空间①

目录 前言: 1.什么是地址空间 区域划分 页表: 2.为什么要有地址空间 2.1 进程与内存解耦合 2.2安全 3.凭什么说进程具有独立性: 4.用地址空间解释一下申请内存 前言: 在C语言中,我们说我们将内存分为,栈区…

vue3组件之间的传参

1、父传子 defineProps 父组件 <script setup>import { reactive } from vue;import Children from ./children.vue;const parentProps reactive({name:zhangsan,age:20})</script><template><div>这是父组件</div><div>子组件:<Chil…

探索大型语言模型(LLM)在人类性格个性评估(MBTI)中的前景与应用

1.概述 大型语言模型&#xff08;LLM&#xff09;如ChatGPT在各个领域的应用确实越来越广泛&#xff0c;它们利用庞大的数据集进行训练&#xff0c;以模拟人类的语言理解和生成能力。这些模型在提供信息、解答问题、辅助决策等方面表现出了强大的能力&#xff0c;但它们并不具…

AI大模型之路 第二篇: Word2Vec介绍

你好&#xff0c;我是郭震 今天我来总结大模型第二篇&#xff0c;word2vec&#xff0c;它是大模型的根基&#xff0c;一切NLP都会用到它。 Word2Vec Word2Vec 是一种流行的自然语言处理&#xff08;NLP&#xff09;工具&#xff0c;它通过将词汇表中的每个单词转换成一个独特的…

优先级队列(概念理解/底层模拟/时间复杂度分析)

目录 1.概念理解 2.优先级队列的底层模拟 2.1堆的概念 2.2优先队列的模拟实现 2.2.1把Heap类定义好 2.2.2初始化堆 2.2.3创建大堆 1.思路 以此二叉树为例&#xff1a; 图文理解&#xff1a; 2.思路转化为代码 2.2.4堆操作之offer&#xff08;进队列&#xff09; 1…