什么是 Token 和 MD5 ?

embedded/2024/11/29 9:39:03/

目录

一:Token和MD5分别是什么

1:Token

 2:MD5

二:简易Token的实现

1:Base64。

2:验证Token

 三:MD5的使用


一:Token和MD5分别是什么

1:Token

Token 的中文有人翻译成 “令牌”,意思就是,你拿着这个令牌,才能过一些关卡。

        Token 是一个用户自定义的任意字符串。在成功提交了开发者自定义的这个字符串之后,Token 的值会保存到服务器后台。只有服务器和客户端前端知道这个字符串,于是 Token 就成了这两者之间的密钥,它可以让服务器确认请求是来自客户端还是恶意的第三方。使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

1) 客户端使用用户名跟密码请求登录
2) 服务端收到请求,去验证用户名与密码
3) 验证成功后,服务端生成一个 Token,这个 Token 可以存储在内存、磁盘、或者数据库里,再把这个 Token 发送给客户端
4) 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage
5) 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token

6) 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

 2:MD5

        MD5 即 Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有 MD5 实现。
        理论上 MD5 是不可逆的,而且 MD5 本来也不是作加密使用,而是用来校验数据的完整性,只是因为其不可逆且稳定、快速的特点,被广泛用于对明文密码的加密。
        但是简单密码来说,破解者完全可以将一定范围内的密码字典全部计算出来之后存为数据库,之后直接查询进行破解。

        用户重要信息(如密码)不应该明文保存到数据库,可以通过 MD5 加密后再保存:

二:简易Token的实现

1:Base64。

        用记事本打开 exe、jpg、pdf 这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符。当不可见字符在网络上传输时,比如说从 A 计算机传到 B 计算机,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。
        为了解决这个问题,我们可以先对数据进行编码,比如 编码,变成可见字符,也就是 ASCII 码可表示的可见字符,从而确保数据可靠传输。 的内容是有 0 ~ 9,a ~ z,A ~ Z,+,/ 组成,正好 64 个字符,这些字符是在 ASCII 可表示的范围内,属于 95 个可见字符的一部分。
        所以,如果要让记事本这样的文本处理软件能处理二进制数据,如使用 json 保存二进制信息,需要先把数据先做一个 Base64 编码,统统变成可见字符,再保存。在 Base64 中的可打印字符包括大写英文字母 A-Z、小写英文字母 a-z、阿拉伯数字 0-9,这样共有 62个字符,此外两个可打印符号在不同的系统中而不同,通常用加号(+)和正斜杠(/)。外加“补全符号”,通常用等号(=)。
        Base64 是一种用 64 个字符来表示任意二进制数据的方法,常用于在 URL、Cookie、网页中传输少量二进制数据。Base64 要求把每三个 8Bit 的字节转换为四个 6Bit 的字节(3*8 = 4*6 = 24),然后把 6Bit 再添两位高位 0,组成四个 8Bit 的字节,也就是说,转换后的字符串理论上将要比原来的长 1/3。

 

        在下面的Token生成中,我们使用了随机数字和Base64的算法。

string RandomString(const int len) /*参数为字符串的长度*/
{/*初始化*/string str; /*声明用来保存随机字符串的str*/char c;     /*声明字符c,用来保存随机生成的字符*/int idx;    /*用来循环的变量*//*循环向字符串中添加随机生成的字符*/for (idx = 0; idx < len; idx++) {/*rand()%26是取余,余数为0~25加上'a',就是字母a~z,详见asc码表*/c = 'a' + rand() % 26;str.push_back(c); /*push_back()是string类尾插函数。这里插入随机字符c*/}return str; /*返回生成的随机字符串*/
}int main()
{string Token = RandomString(32);}

2:验证Token

        我们将这个Token存储到redis中,因为这个Token需要频繁验证。所以验证前我们要连接redis,拿取他的Token,如果对应上说明是同一个用户。

//验证登陆token,成功返回0,失败-1
int VerifyToken(string &user_name, string &token) {int ret = 0;CacheManager *cache_manager = CacheManager::getInstance();// increase message countCacheConn *cache_conn = cache_manager->GetCacheConn("token");AUTO_REL_CACHECONN(cache_manager, cache_conn);if (cache_conn) {string tmp_token = cache_conn->Get(user_name);if (tmp_token == token) {ret = 0;} else {ret = -1;}} else {ret = -1;}return ret;
}

 三:MD5的使用

        网上的MD5的实现非常多还很复杂,这里就不进行讲解了,我们主要是来学会使用这个md5.下面这个网址是在线的一个md5生成网站。我们可以使用这个来对我们的密码进行加密。

md5在线解密破解,md5解密加密

        我们既然知道了md5的作用后,那我们写程序的时候,我们对于服务端注册账号的时候,我们不应该存储明文密码,而是存储md5加密后的,我们可以将md5生成给嵌入到程序中。我们可以把密码给加密三次或着多次后,再写到服务器中。这样可以加大破解时间。0voice · GitHub


http://www.ppmy.cn/embedded/141426.html

相关文章

nvm 常用命令

nvm 常用命令 参考1 参考2 nvm list available 查看nodejs有哪些版本 npm install 10.13.0 下载10.13.0版本 nvm use 10.13.0 切换到10.13.0版本 nvu list 查看已安装版本

迁移学习和无监督学习是什么

迁移学习和无监督学习都是机器学习中的重要方法&#xff0c;它们在湍流速度场超分辨率重建任务中有着独特的作用。让我们通过简单的语言和例子来解释它们如何帮助解决这个问题。 1. 迁移学习&#xff1a; 迁移学习是一种方法&#xff0c;它利用一个领域&#xff08;例如某种类…

R语言处理JSON文件

R语言处理JSON文件 引言 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。它基于JavaScript编程语言的一个子集&#xff0c;但JSON是独立于语言的文本格式&#xff0c…

网络--传输层协议--UDP

传输层作用:负责数据能够从发送端传输到接收端。 1、再谈端口号 端口号标识了一个主机上进行通信的不同的应用程序。 1.1、端口号划分范围 0 - 1023 : 知名端口号,HTTP、FTP、SSH等这些广为使用的应用层协议,他们的端口号都是固定的。 10234 - 65536:操作系统动态分配的…

金铲铲S13双城之战自动拿牌助手

金铲铲S13双城之战自动拿牌助手 基于python&#xff0c;pyautogui和金铲铲自带备战助手实现 B站视频演示效果 shuangcheng.py import timeimport pyautogui import datetimeprint(请关注您的分辨率&#xff0c;此程序需要配合thumbs_x_y.txt文件同时使用) print(简介&#x…

Spring Boot【四】

单例bean中使用多例bean 1.lookup-method方式实现 当serviceB中调用getServiceA的时候&#xff0c;系统自动将这个方法拦截&#xff0c;然后去spring容器中查找对应的serviceA对象然后返回 2.replaced-method&#xff1a;方法替换 我们可以对serviceB这个bean中的getServiceA…

Cobalt Strike 4.8 用户指南-第十一节 C2扩展

11.1、概述 Beacon 的 HTTP 指标由 Malleable Command and Control &#xff08;Malleable C2&#xff09; 配置文件控制。Malleable C2 配置文件是一个简单的程序&#xff0c;它指定如何转换数据并将其存储在事务中。转换和存储数据的同一程序&#xff08;向后解释&#xff0…

uniapp css无法显示进度条的问题解决

最近在开发uniapp页面时 发现即使写了css overflow: scroll强制显示滑动进度条 依然没有显示&#xff0c;想了想&#xff0c;肯定是官方的样式表做了相应的处理。果然一检查&#xff0c;在全局样式发现了&#xff1a; ::-webkit-scrollbar { display: none; } 因此&#xff0c;…