当前位置: 首页 > news >正文

实现用户个人随机salt生成jwt及鉴别用户权限的实现思路

实现用户个人随机salt生成jwt及鉴别用户权限的实现

盐值是什么?

盐值(salt)是在密码学中用于增加密码安全性的一种随机值。它通常是一个随机生成的字符串,与用户密码结合在一起,然后再进行加密处理。盐值的作用是增加密码的复杂度,防止常见的密码破解攻击。

在密码存储和验证过程中,通常使用盐值来加密用户密码,以提高密码的安全性。具体来说,加密过程通常分为以下几个步骤:

  1. 生成盐值:系统会随机生成一个盐值,通常是一个足够长的随机字符串。
  2. 与密码组合:将盐值与用户密码结合在一起。
  3. 加密处理:对组合后的密码进行加密处理,通常使用哈希函数进行加密,生成加密后的密码。
  4. 存储密码:将加密后的密码和盐值一起存储到数据库中。

而盐并不只是可以加密密码,也可以加密很多东西,例如token中的密钥可以用盐代替,使得每个用户的token加密都不一样。

盐的作用

  1. 增加密码复杂度:盐值是一个随机生成的字符串,与用户密码组合后进行加密,可以大大增加密码的复杂度。即使用户使用简单的密码,通过引入盐值也能够提高密码的安全性,因为相同的密码在不同用户身上使用不同的盐值进行加密后,生成的加密密码也会不同,从而增加了破解的难度。
  2. 防止彩虹表攻击:彩虹表是一种常见的密码破解方法,攻击者事先计算并存储了大量常见密码的哈希值和对应的明文密码的对应关系,然后通过比对哈希值来破解密码。盐值的引入可以有效防止彩虹表攻击,因为即使相同的密码在不同用户身上使用相同的盐值进行加密,最终生成的加密密码也会不同,从而增加了破解的难度。
  3. 增加密码安全性:密码是用户账户安全的第一道防线,而盐值的引入可以有效增加密码的安全性。通过引入随机的盐值,可以大大降低密码被破解的风险,保护用户账户的安全性。
  4. 提高数据安全性:除了在密码加密中的应用外,盐值还可以用于加密其他敏感数据,如 token、加密文件等。通过引入盐值进行加密,可以提高数据的安全性,防止数据被未授权的访问和篡改。

具体场景

先以具体场景开始吧,业务场景是:用户进行微信手机号快捷登录(逻辑需要实现注册用户及登录);

目前指定的条件是:数据库用户id自增,用户在首次登录时随机生成salt,随机生成用户名,头像,指定用户权限;;;利用用户名,id,权限等级,salt生成用户token;

最后指定返回的结果是:用户生成的(个人中心的信息+生成的token);

好了,条件列完了,接下来怎么实现呢?

以go语言中gin框架为例,这个过程需要分两大步来做,首先是生成token的方法,然后是用户初始化的方法;

这两步首先需要进行用户初始化,再进行加盐token的生成返回给前端;

初始化首先需要在拿到用户手机号后,调用函数升成用户名,用户salt,用户头像,在插入用户信息时,数据库会将用户id一并生成,并生成默认权限。

第二步:从数据库中拿出用户id,name,salt,权限。共同生成用户的token,并将用户信息连带token返回给前端。

这就出现了一个问题,中间件中每次都是要验证token是否正确和有效,如果salt放到mysql中每次验证都需要查询数据库,对性能影响很大,所以,我们就需要在用户登陆时就将用户个人信息放入redis缓存中设置过期时间,若用户活跃,那么该信息就会一直放在redis中,提升用户进行用户信心相关业务操作时的性能。

相关文章:

实现用户个人随机salt生成jwt及鉴别用户权限的实现思路

实现用户个人随机salt生成jwt及鉴别用户权限的实现 盐值是什么? 盐值(salt)是在密码学中用于增加密码安全性的一种随机值。它通常是一个随机生成的字符串,与用户密码结合在一起,然后再进行加密处理。盐值的作用是增加…...

AI工具的热门与卓越:揭示AI技术的实际应用和影响

文章目录 每日一句正能量前言常用AI工具创新AI应用个人体验分享后记 每日一句正能量 我们在我们的劳动过程中学习思考,劳动的结果,我们认识了世界的奥妙,于是我们就真正来改变生活了。 前言 随着人工智能(AI)技术的快…...

VUE el-button指定图片背景

似乎只能通过css指定&#xff1f; 代码1 <el-button circleclass"stream0"click"switchToStream(0)" > </el-button> 代码2 <style>.stream0 {background-size: cover;background-image: url(~/assets/stream.png); } 如果要动态变…...

【ARM 嵌入式 C 入门及渐进 1.2 -- 是否为 n 字节对齐】

文章目录 是否为 n 字节对齐 是否为 n 字节对齐 在C语言中&#xff0c;你可以定义一个宏来检查一个给定地址是否是n字节对齐的。这里的n应该是2的幂&#xff08;例如&#xff0c;2、4、8、16等&#xff09;。要做到这一点&#xff0c;可以利用位操作的特性。具体地&#xff0c…...

适配qnx和linux平台的线程管理类封装

概述 封装代码仓库&#xff1a; https://gitee.com/liudegui/my_thread 尝试封装一个基于C11的多线程控制与调度类&#xff0c;适配QNX和Linux平台&#xff0c;且代码符合Misra标准。它提供了以下主要功能&#xff1a; 线程的创建与销毁管理。线程的优先级调度。线程的CPU亲…...

【信息系统项目管理师】复习~第十五章

15.项目风险管理 每个项目都存在两个层面上的风险&#xff1a;①每个项目都有会影响项目达成目标的单个风险&#xff1b;②由单个风险和不确定性的其他来源联合导致的整体项目风险。项目风险会对项目目标产生负面或正面的影响&#xff0c;也就是风险与机会。项目风险管理旨在利…...

ARM单片机实现流水灯(GD32)

根据上图可知使用的引脚分别是PA8,PE6,PF6流水灯功能的实现要分别初始化这几个引脚 流水灯实现 编写流水灯代码 LED.C #include "gd32f30x.h" // Device header #include "Delay.h" // 初始化LED灯 void LED_Init(void){// 使能RCU时钟…...

操作系统基础之磁盘

概述 基本概念 磁盘有正反两个盘面&#xff0c;每个盘面有多个同心圆&#xff0c;每个同心圆是一个磁道&#xff0c;每个同心圆又被划分为多个扇区&#xff0c;数据就被存在扇区中。 磁头首先寻找到对应磁道&#xff0c;然后等到磁盘进行周期旋转到指定的扇区&#xff0c;才…...

【Unity Shader入门精要 第6章】基础光照(一)

1. 什么是光照模型 光照原理 在真实世界中&#xff0c;我们能够看到物体&#xff0c;是由于眼睛接收到了来自观察目标的光。这里面包括两种情况&#xff1a;一部分是观察目标本身发出的光&#xff08;自发光&#xff09;直接进入我们的眼睛&#xff0c;另一部分是其他物体&am…...

JavaEE概述 + Maven

文章目录 一、JavaEE 概述二、工具 --- Maven2.1 Maven功能 仓库 坐标2.2 Maven之项目构建2.3 Maven之依赖管理 三、插件 --- Maven Helper 一、JavaEE 概述 Java SE、JavaEE&#xff1a; Java SE&#xff1a;指Java标准版&#xff0c;适用于各行各业&#xff0c;主要是Java…...

python把png转成jpg

在Python中&#xff0c;你可以使用PIL&#xff08;Python Imaging Library&#xff0c;也称为Pillow&#xff09;库来读取PNG图片并将其转换为JPG格式。下面是一个简单的示例代码&#xff1a; from PIL import Image# 打开PNG图片 png_image Image.open(input.png)# 保存为JP…...

信息系统架构基本概念及发展_2.信息系统架构的定义

1.几种架构的定义 信息系统架构仍在不断发展中&#xff0c;还没有形成一个公认的定义&#xff0c;这里举出几个定义。 定义1&#xff1a;软件或计算机系统的信息系统架构是该系统的一个&#xff08;或多个&#xff09;结构&#xff0c;而结构由软件元素、元素的外部可见…...

ctfshow SSRF 351-358

做题前,需要先学习关于ssrf漏洞的相关知识 小注意: 当使用 file_get_contents() 函数访问远程 URL 时&#xff0c;它会尝试获取该 URL 指向的资源的内容&#xff0c;并将内容以字符串的形式返回。 如果 b.php 文件是一个 PHP 文件&#xff0c;它包含的内容取决于该 PHP 文件…...

优化学习方法,事半功倍

学习&#xff0c;是人一生中必不可少的过程。在学习的道路上&#xff0c;我们会遇到各种各样的挑战和困难&#xff0c;但只要我们能够发现并优化适合自己的学习方法&#xff0c;就能事半功倍&#xff0c;取得更好的成绩。 首先&#xff0c;要充分了解自己的学习方式和习惯。每个…...

Spring STOMP-开启STOMP

通过Spring框架的spring-messaging和spring-websocket模块&#xff0c;提供了对WebSocket上STOMP的支持。一但你添加了这些依赖项&#xff0c;你就可以像下面这个示例一样&#xff0c;通过WebSocket公开一个STOMP端点&#xff1a; import org.springframework.web.socket.conf…...

Python 开发 框架安全:Django SQL注入漏洞测试.(CVE-2021-35042)

什么是 Django 框架 Django 是一个用 Python 编写的 Web 应用程序框架。它提供了许多工具和库&#xff0c;使得开发 Web 应用程序变得更加容易和高效。Django 遵循了“MTV”&#xff08;模型-模板-视图&#xff09;的设计模式&#xff0c;将应用程序的不同组件分离开来&#x…...

《Python编程从入门到实践》day25

# 昨日知识点回顾 如何创建多行外星人 碰撞结束游戏 创建game_stats.py跟踪统计信息 # 今日知识点学习 第14章 记分 14.1 添加Play按钮 14.1.1 创建Button类 import pygame.font# button.py class Button:def __init__(self, ai_game, msg):"""初始化按钮…...

Unity 性能优化之光照优化(七)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、测试目的一、实时光源是什么&#xff1f;二、开始测试1.场景中只有一个光照的数值情况2.添加4个点光源后4.结果 总结 前言 实时光源数量越多&#x…...

C语言 | Leetcode C语言题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; int largestRectangleArea(int* heights, int heightsSize) {int st[heightsSize];int p[2];p[0]-1,p[1]heightsSize;int size0,result0;st[size]0;for(int i1;i<heightsSize;i){ while(size!0&&heights[i]<heights[st[size-1…...

AI办公自动化-用kimi批量重命名Word文档

文件夹里面有很多个word文档&#xff0c;标题里面都含有零代码编程&#xff0c;现在想将其替换为AI办公自动化。 在kimichat中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个编写Python脚本的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&am…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...