登录时用户名密码加密传输(包含前后端代码)
页面输入用户名密码登录过程中,如果没有对用户名密码进行加密处理,可能会导致传输过程中数据被窃取,就算使用https协议,在浏览器控制台的Request Payload中也是能直接看到传输的明文,安全感是否还是不足。
大致流程:前端,在请求登录接口之前对用户名密码进行加密,服务端收到请求后解密得到明文的用户名密码。
这里使用RSA非对称加密,前端使用公钥加密,后端使用私钥解密,这样就不会暴露私钥。
一、后端
1、pom文件添加依赖
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-core</artifactId><version>5.8.22</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-crypto</artifactId><version>5.8.22</version></dependency>
2、加密解密工具类
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;public class SecretConstant {/*** 登陆相关*/public class LoginSecret{/*** 非对称加密 私钥 公钥私钥可以自己用代码生成,也可以在线生成,例如:https://tool.ip138.com/rsa/*/public static final String PRIVATE_KEY = "MIIBOAIBAAJAflJQPKoKO9gz9Op2XINkHXVIyonzt/HClZRVf+2MyF4OLGckiBLM\n" +"rLq6jN/U4JlgIxCIni3zOsJdhIIF1D6fQwIDAQABAkAsKpeHPmSpm+Q+o6OSoRXl\n" +"/tXeivE9xTelmOF0AxiQDWRu1XWKAmjR2kKBgN/B9NlhBjW5+p4PW30UI7uCyKUR\n" +"AiEAw8ba06ZG7CZyXZVD8MhFx0ztg0kIE+ZLOqGpjSpKC70CIQClLfTWxpTbF4gb\n" +"lxDOJL5G1XiXcM516MUz6q3udTiG/wIgZ0v929yI4ULr5urB/UJ+Zsj1LOcUxwMk\n" +"wFvaDSy6AvUCIAehu/JAcpg82hkMPcaIhBIZwtycZa2k95eSfD7MQ7RZAiA+Y8yI\n" +"MkG4asXqoh2jryn40ih2q/GnXoCwdPXUa9E4MA==";/*** 非对称加密 公钥*/public static final String PUBLIC_KEY = "MFswDQYJKoZIhvcNAQEBBQADSgAwRwJAflJQPKoKO9gz9Op2XINkHXVIyonzt/HClZRVf+2MyF4OLGckiBLMrLq6jN/U4JlgIxCIni3zOsJdhIIF1D6fQwIDAQAB";}/*** 测试一下* @param args*/public static void main(String[] args) {String un = "admin";String pw = "admin@123456";// 用户名密码解密RSA rsa = new RSA(SecretConstant.LoginSecret.PRIVATE_KEY, SecretConstant.LoginSecret.PUBLIC_KEY);String un_jm = rsa.encryptBase64(un,KeyType.PublicKey);System.out.println("公钥加密后:"+un_jm);// 前端传过来的用户名密码是通过公钥加密的String userName_plaintext = rsa.decryptStr(un_jm, KeyType.PrivateKey);System.out.println("私钥解密后:"+userName_plaintext);// 加密后的密文String temp = "djCaCjhwVRc29vNHEIUqoGkn0azDjGdjHHV+zetw8GcKmJ8u2/VgAX54G/zzpcrBrpkR+SmS7QPkpSz5s05OLA==";System.out.println("私钥解密后:"+rsa.decryptStr(temp, KeyType.PrivateKey));}
}
3、使用示例
public BaseResult login(String userNameCipher, String passwordCipher) {// 用户名密码解密RSA rsa = new RSA(SecretConstant.LoginSecret.PRIVATE_KEY, SecretConstant.LoginSecret.PUBLIC_KEY);String userName = rsa.decryptStr(userNameCipher, KeyType.PrivateKey);String password = rsa.decryptStr(passwordCipher, KeyType.PrivateKey);// 登录逻辑...}
二、前端
前端使用公钥加密,秘钥可以直接写在js文件中,因为用的是公钥所以不怕泄漏,当然了,如果想灵活一点,可以把公钥放在后端,前端通过接口查询得到公钥。
1、加密工具类
文件名称encryptUtils.js,内容如下,其他地方调用即可。
import JSEncrypt from 'jsencrypt';// 可能需要需要先安装jsencrypt库,执行:npm install jsencrypt /*** 登录使用的公钥,* 如果想灵活一点,可以把公钥放在后端,前端通过接口查询得到公钥。* @type {string}*/
const LOGIN_PUBLIC_KEY = "MFswDQYJKoZIhvcNAQEBBQADSgAwRwJAflJQPKoKO9gz9Op2XINkHXVIyonzt/HClZRVf+2MyF4OLGckiBLMrLq6jN/U4JlgIxCIni3zOsJdhIIF1D6fQwIDAQAB";/*** 获取登录使用的公钥* @returns {string}*/
export const getLoginPublicKey = () => {return LOGIN_PUBLIC_KEY;
}/*** 加密* @param text 需要加密的文本* @param publicKey 公钥* @returns {string | false}*/
export const encodeStr = (text, publicKey) => {// RSA(非对称加密)const JSE = new JSEncrypt();// 设置公钥JSE.setPublicKey(publicKey);return JSE.encrypt(text);
}
2、使用示例
在需要加密的地方调用上面的方法
import request from '@/utils/request';
import { getLoginPublicKey, encodeStr } from '@/utils/encryptUtils';/*** 请求后端登录的方法*/
export async function login(params) {// 公钥加密params.userName = encodeStr(params.userName, getLoginPublicKey());params.password = encodeStr(params.password, getLoginPublicKey());const result = await request('/api/v1/user/login', {method: 'POST',type: 'JSON',body: params});return result;
}
前端加密后请求,后端解密得到明文。

相关文章:
登录时用户名密码加密传输(包含前后端代码)
页面输入用户名密码登录过程中,如果没有对用户名密码进行加密处理,可能会导致传输过程中数据被窃取,就算使用https协议,在浏览器控制台的Request Payload中也是能直接看到传输的明文,安全感是否还是不足。 大致流程&a…...
ai聊天对话页面-uniapp
流式传输打字机效果,只支持uniapp内使用 ,下载地址 https://download.csdn.net/download/qq_54123885/89899859...
虚拟滚动列表如何实现?
highlight: a11y-dark 虚拟滚动列表,虚拟滚动的关键在于只渲染当前视口内可见的数据项,而不是一次性渲染所有数据项。这可以显著提高性能,尤其是在处理大量数据时。 以下是一个完整的虚拟滚动列表的示例代码: <!DOCTYPE htm…...
07_Linux网络配置与管理:命令与工具指南
本系列文章导航:01_Linux基础操作CentOS7学习笔记-CSDN博客 文章目录 网络配置与管理:命令与工具指南1. ping命令2. ifconfig命令3. ip命令4. route命令5. ip route命令6. nslookup命令7. nmcli命令8. nmtui命令9. RHEL7修改网卡名1. 修改网络(会话)配置…...
首个统一生成和判别任务的条件生成模型框架BiGR:专注于增强生成和表示能力,可执行视觉生成、辨别、编辑等任务
BiGR是一种新型的图像生成模型,它可以生成高质量的图像,同时还能有效地提取图像特征。该方法是通过将图像转换为一系列的二进制代码来工作,这些代码就像是图像的“压缩版”。在训练时会遮住一些代码,然后让模型学习如何根据剩下的…...
【Java知识】Java进阶-服务发现机制SPI
文章目录 SPI概述SPI 工作原理 ServiceLoader代码展示简化的 ServiceLoader 类关键点解释使用示例1. 定义服务接口2. 实现服务提供者3. 配置文件4. 加载服务提供者 总结 SPI使用场景1. 数据库驱动2. 日志框架3. 图像处理4. 加密算法5. 插件系统6. 缓存机制示例代码1. 定义服务接…...
多模态技术的协同表现:从文本生成、语音合成到口型同步综合测评
本文是针对多模态对话系统核心技术栈的使用效果和网络测评整理。 测评内容基于用户体验,侧重于从使用者角度出发,讨论实际操作中的体验感受,如技术的易用性、输出效果如文本的连贯性、语音的自然度、口型同步的准确性等。不涉及具体算法架构…...
Java最全面试题->Java主流框架->Srping面试题
Spring面试题 下边是我自己整理的面试题,基本已经很全面了,想要的可以私信我,我会不定期去更新思维导图 哪里不会点哪里 谈谈你对 Spring 的理解? Spring 是一个开源框架,为简化企业级应用开发而生。Spring 可以是使简单的 JavaBean 实现以前只有 EJB 才能实现的功能。…...
参编国家标准需要注意的事项有哪些?
1. 项目相关性: • 选择与自身企业产品、业务或专业领域紧密相关的国家标准进行参编。这样不仅能确保企业在标准制定过程中发挥自身的优势和专长,使参编工作更有实际意义和价值,也有利于企业将标准更好地应用于自身的生产经营活动,…...
【Dash】feffery_antd_components 按钮组件的应用
一、feffery_antd_componenet 中的 AntdFloatButton 和 AntdFloatButtonGroup AntdFloatButton 和 AntdFloatButtonGroup 是两个用于创建悬浮按钮和悬浮按钮组的组件。 AntdFloatButton 是单个悬浮按钮组件,它提供了多种属性来定义按钮的外观及行为。AntdFloatBut…...
01 springboot-整合日志(logback-config.xml)
logback-config.xml 是一个用于配置 Logback 日志框架的 XML 文件,通常位于项目的 classpath 下的根目录或者 src/main/resources 目录下。 Logback 提供了丰富的配置选项,可以满足各种不同的日志需求。需要根据具体情况进行配置。 项目创建࿰…...
Java最全面试题->计算机基础面试题->计算机网络面试题
计算机网络 下边是我自己整理的面试题,基本已经很全面了,想要的可以私信我,我会不定期去更新思维导图 哪里不会点哪里 1.说一下TCP/IP四层模型 TCP/IP协议是美国国防部高级计划研究局为实现ARPANET互联网而开发的。 网络接口层ÿ…...
VSCode编译器改为中文
1. 通过快捷键设置中文 打开命令面板:按住键盘上的CtrlShiftP组合键,打开命令面板。 输入并设置语言:在命令面板中输入Configure Display Language。 点击Configure Display Language选项。 在弹出的语言选择列表中,选择zh-cn…...
前端开发设计模式——状态模式
目录 一、状态模式的定义和特点 二、状态模式的结构与原理 1.结构: 2.原理: 三、状态模式的实现方式 四、状态模式的使用场景 1.按钮的不同状态: 2.页面加载状态: 3.用户登录状态: 五、状态模式的优点 1.提…...
特种作业操作烟花爆竹试题分享
1.(单选题)职业卫生研究的是人类从事各种职业劳动过程中的( )。 A.健康问题 B.环境问题 C.卫生问题 答案:C 2.(单选题)安全生产事关人民群众的( )安全,事关改革发展和…...
实现prometheus+grafana的监控部署
直接贴部署用的文件信息了 kubectl label node xxx monitoringtrue 创建命名空间 kubectl create ns monitoring 部署operator kubectl apply -f operator-rbac.yml kubectl apply -f operator-dp.yml kubectl apply -f operator-crd.yml # 定义node-export kubectl app…...
确保Spring Boot定时任务只执行一次方案
在Spring Boot项目中,确保定时任务只执行一次是一个常见的需求。这种需求可以通过多种方式来实现,以下是一些常见的方法,它们各具特点,可以根据项目的实际需求来选择最合适的方法。 1. 使用Scheduled注解并设置极大延迟 一种简单…...
【Python数据可视化】利用Matplotlib绘制美丽图表!
【Python数据可视化】利用Matplotlib绘制美丽图表! 数据可视化是数据分析过程中的重要步骤,它能直观地展示数据的趋势、分布和相关性,帮助我们做出明智的决策。在 Python 中,Matplotlib 是最常用的可视化库之一,它功能…...
【最新通知】2024年Cisco思科认证CCNA详解
CCNA现在涵盖安全性、自动化和可编程性。该计划拥有一项涵盖IT职业基础知识的认证,包括一门考试和一门培训课程,助您做好准备。 CCNA培训课程和考试最近面向最新技术和工作岗位进行了重新调整,为您提供了向任何方向发展事业所需的基础。CCNA认…...
监控内容、监控指标、监控工具大科普
在现代信息技术领域,监控技术扮演着至关重要的角色。它帮助我们实时了解系统、网络、应用以及环境的状态,确保它们的安全、稳定和高效运行。以下是对监控内容、监控指标和监控工具的详细科普。 一、监控内容 监控内容是指监控系统所关注和记录的具体信…...
ThinkPad风扇控制终极指南:TPFanCtrl2让你的笔记本既静音又凉爽
ThinkPad风扇控制终极指南:TPFanCtrl2让你的笔记本既静音又凉爽 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否曾因ThinkPad风扇的突然轰鸣而分心&a…...
基于ARM9核心板的工业双CAN网关开发实战:从硬件选型到软件架构
1. 项目概述与核心价值最近在做一个工业网关项目,客户要求设备必须支持双路CAN总线,用于同时连接现场的执行器和上位机监控系统。时间紧,任务重,自己从头设计硬件、画板、调试驱动,周期太长,风险也高。这时…...
智能体编排框架实战:构建可控可观测的多AI协同工作流
1. 项目概述与核心价值最近在折腾AI应用开发,特别是想把多个大语言模型(LLM)和工具(Tools)组合起来,搞点自动化流程。市面上现成的框架不少,但要么太重,要么太“黑盒”,想…...
深度解析Kosmosaos:定制Linux系统镜像的构建、部署与自动化实践
1. 项目概述:一个面向未来的操作系统镜像最近在开源社区里,一个名为chasefort/kosmosaos的项目镜像引起了我的注意。乍一看这个名字,可能会觉得有些陌生,甚至有点“缝合”的感觉——它似乎融合了“Kosmos”和“AOS”的概念。但当你…...
吴哥窟水文测试:验证古代水库管理AI的智慧
一、从古代水利到现代AI测试的跨越吴哥窟,这座位于柬埔寨的古代都城遗址,以其宏伟的寺庙建筑群闻名于世。然而,鲜为人知的是,支撑这座城市繁荣数百年的,是一套复杂而精密的水管理系统。这套建于9至13世纪的水利工程&am…...
独立开发者如何利用 Taotoken 统一管理多个 AI 项目支出
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用 Taotoken 统一管理多个 AI 项目支出 对于同时维护多个小型 AI 应用或实验项目的独立开发者而言,成…...
HiveWE魔兽地图编辑器:5分钟快速上手指南,告别卡顿创作新时代
HiveWE魔兽地图编辑器:5分钟快速上手指南,告别卡顿创作新时代 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为《魔兽争霸III》原版地图编辑器缓慢的加载速度和繁琐的操作而烦恼…...
py每日spider案例之某guangdong省人mingzhengfu登录接口(难度高 )
加密入口: 逆向接口: sm2密钥接口: js逆向代码: const fs = require("fs"); const path = re...
点式玻璃幕墙及采光顶设计的一些想法
点式玻璃幕墙及采光顶设计的一些想法 点式玻璃幕墙是在主龙骨上面固定点支撑装置,由点支撑装置支撑玻璃面板的一种常用幕墙表现形式,他最早起源于国外。因为玻璃的通透性,建筑内外有效融合,空间感增强,开阔了视野,增加了建筑物的现代感。 点式玻璃幕墙最主要的组成部分是…...
深度学习在甲状腺细胞病理诊断中的创新应用
1. 深度学习在甲状腺细胞病理学中的应用背景甲状腺癌是全球范围内最常见的内分泌系统恶性肿瘤之一,其发病率在过去几十年中持续上升。细针穿刺活检(FNAB)作为甲状腺结节诊断的金标准,其准确率直接影响后续治疗方案的选择。然而&am…...
