Python用摘要算法生成token及检验token的示例代码

yizhihongxing

首先,我们需要了解什么是摘要算法以及什么是Token。摘要算法是一种将任意长度的数据映射为固定长度摘要值的算法,通常用于数据完整性校验和数字签名等场景。而Token可以理解为一种加密过的字符串,里面包含了一定的信息,如用户ID、角色等,用于验证用户身份和权限。

生成Token的基本流程是将需要加密的信息先进行摘要算法哈希处理,再将哈希值与一定的盐进行混淆加密,最后生成的加密字符串即为Token。检验Token则需要将Token进行解密,获取其中存储的原始信息,再根据一定的规则判断Token是否合法。

下面是一个基于Python的示例代码,演示如何使用摘要算法生成Token及检验Token:

import hashlib
import hmac
import base64

# 生成Token
def generate_token(user_id, role):
    secret_key = 'MY_SECRET_KEY' # 自定义秘钥
    data = user_id + role # 拼接需要加密的内容
    hash_value = hashlib.sha256(data.encode('utf-8')).hexdigest() # 对内容进行SHA256哈希
    signature = hmac.new(secret_key.encode('utf-8'), hash_value.encode('utf-8'), digestmod=hashlib.sha256).digest() # 将哈希值与秘钥混淆加密
    encoded_signature = base64.b64encode(signature).decode() # 将混淆加密后的签名进行base64编码
    token = user_id + ':' + encoded_signature # 拼接Token
    return token

# 检验Token
def verify_token(token, role):
    secret_key = 'MY_SECRET_KEY' # 自定义秘钥
    user_id, encoded_signature = token.split(':') # 提取Token中的用户ID和签名
    data = user_id + role # 拼接需要校验的内容
    hash_value = hashlib.sha256(data.encode('utf-8')).hexdigest() # 对内容进行SHA256哈希
    signature = base64.b64decode(encoded_signature) # 对签名进行base64解码
    # 使用秘钥对解码后的签名进行混淆加密,与哈希值进行比较
    if hmac.compare_digest(signature, hmac.new(secret_key.encode('utf-8'), hash_value.encode('utf-8'), digestmod=hashlib.sha256).digest()):
        return True # 校验通过,返回True
    else:
        return False # 校验不通过,返回False

通过调用generate_token函数,可以输入用户ID和角色,生成一个加密后的Token。例如,输入用户ID为123,角色为admin,运行代码:

token = generate_token('123', 'admin')
print(token) # 输出形如'123:QeZ1Hmqc9AWWuEQL5tv75m7Sw0fD3UvzqPq74jZIfpk='的加密后的Token

得到了一个形如'123:QeZ1Hmqc9AWWuEQL5tv75m7Sw0fD3UvzqPq74jZIfpk='的加密后的Token。可以看到,Token以冒号分隔,前半部分为用户ID,后半部分为经过混淆加密后的签名。

通过调用verify_token函数,可以输入需要校验的Token及角色,校验Token是否合法。例如,输入刚刚生成的Token及角色为admin,运行代码:

result = verify_token(token, 'admin')
print(result) # 输出True

得到结果为True,说明输入的Token及角色经过校验,是合法的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python用摘要算法生成token及检验token的示例代码 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python 使用递归回溯完美解决八皇后的问题

    Python使用递归回溯完美解决八皇后问题 八皇后问题是一个经典的问题,它的目标是在一个8×8的棋盘上放置8个皇后,使得每个皇后都不会互相攻击。在本文中,我们将介绍如何使用Python和递归回溯算法来解决八皇后问题。 问题分析 在八皇后问题中,我们需要在一个8×8的棋盘上放置8个皇后,使得每个皇后都不会互相攻击。具体来说,每个皇后不能在同一行、同一列或同一对…

    python 2023年5月14日
    00
  • python字符串切割:str.split()与re.split()的对比分析

    Python 字符串切割:str.split() 与 re.split() 的对比分析 在 Python 中,分割字符串是一项经常使用的操作,我们可以使用 str.split() 或 re.split() 函数实现。两者都可以用来将一个字符串按照特定的分割符进行切割,但是处理方式却有所差异。下面我们详细介绍这两个函数的使用方法、主要区别以及适用场景。 str…

    python 2023年6月3日
    00
  • python编程通过蒙特卡洛法计算定积分详解

    以下是关于“Python编程通过蒙特卡洛法计算定积分详解”的完整攻略: 简介 蒙特卡洛法是一种常见的数值计算方法,可以用于计算定积分。本教程将介绍如何使用Python编程通过蒙特卡洛法计算定积分,并讨论如何使用该方法进行数值积分。 步骤 1.导入库和定义函数 首先,我们需要导入必要的库,包括numpy和matplotlib。在Python中,可以使用以下代码…

    python 2023年5月14日
    00
  • 浅析Python 引号、注释、字符串

    在本攻略中,我们将浅析Python引号、注释、字符串。这些是Python编程中非常基础的概念,但也是非常重要的。 引号 在Python中,字符串可以使用单引号、双引号或三引号来表示。以下是一个示例代码,演示了如何使用不同类型的引号来表示字符串: # 使用单引号表示字符串 str1 = ‘Hello, World!’ print(str1) # 使用双引号表示…

    python 2023年5月15日
    00
  • 8行代码实现Python文件去重

    下面我会详细讲解“8行代码实现Python文件去重”的完整攻略。这个过程中包含以下步骤: 安装Python所需依赖库 创建去重脚本 运行脚本进行去重 1. 安装Python所需依赖库 在开始使用Python进行文件去重之前,我们需要安装一个名叫pandas的Python依赖库。可以使用以下命令进行安装: pip install pandas 这个命令将会在你…

    python 2023年6月5日
    00
  • python实现自动化办公邮件合并功能

    针对“python实现自动化办公邮件合并功能”的完整攻略,我为您提供以下步骤: 步骤一:导入必要的库 邮件合并需要涉及到发送邮件,我们需要导入smtplib库来进行邮件发送,同时还需要导入csv库来读取邮件与联系人的信息: import smtplib import csv 步骤二:读取邮件模板 我们需要事先创建好邮件模板,将要替换的变量标记出来。读取邮件模…

    python 2023年6月5日
    00
  • 解决pyecharts运行后产生的html文件用浏览器打开空白

    解决pyecharts运行后产生的html文件用浏览器打开空白 在使用pyecharts绘制图表后,我们可以将图表保存为html文件。但是有时候,我们用浏览器打开html文件时,会发现页面是空白的。本攻略将介绍如何解决pyecharts运行后产生的html文件用浏览器打开空白的问题,包括修改pyecharts配置、使用本地服务器等方法。 步骤1:修改pyec…

    python 2023年5月15日
    00
  • python条件变量之生产者与消费者操作实例分析

    我来详细讲解一下“Python条件变量之生产者与消费者操作实例分析”的完整攻略。 什么是条件变量? 条件变量是具备通知机制的锁,可以用于多个线程之间的协调。在多线程编程中,常常需要等待某个条件成立才可以继续执行,条件变量可以用来等待和通知。 生产者与消费者模型 生产者与消费者模型是一种常见的多线程模型,其中生产者负责生成某种东西并将其放入共享资源,而消费者则…

    python 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部