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

首先,我们需要了解什么是摘要算法以及什么是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有一个全球社区:https://pypi.org/,在这里我们可以搜索任何主题的Python第三方库。PyPI全称是Python Package Index,指的是Python包的索引,它由PSF(Python Software Foundation)来维护,并且展示全球Python计算生态。 我们需要学会利用PyPI的主站检索,找到我们使用和关…

    python 2023年5月8日
    00
  • 只用50行Python代码爬取网络美女高清图片

    下面是详细的攻略: 一、前置知识 要学习网络爬虫,需要以下基础知识: Python 编程语言基础 HTTP协议 HTML、CSS、JavaScript 技术 正则表达式 二、爬虫实现步骤 1.确定网站 选择一个美女图片分享网站,例如 Tuigirl。 2.确定目标 确定要爬取的内容,例如该网站的美女高清图片。 3.分析目标 打开网站,查看网站源代码,了解要爬…

    python 2023年5月14日
    00
  • python matplotlib画图实例代码分享

    下面我将给您详细讲解“python matplotlib画图实例代码分享”的完整攻略。 1. 准备工作 在进行任何的编程工作之前,我们需要先安装必要的软件。对于matplotlib画图,我们需要安装以下的软件: Python 3环境 matplotlib库 我们可以使用pip命令来安装matplotlib库。在命令行中输入以下命令: pip install …

    python 2023年5月19日
    00
  • Python operator进行归约

    Python中的operator模块提供了许多用于归约(reduce)操作的函数。归约操作是指将庞大的数据聚合成单一的结果,例如求和、求乘积、求最大值等。本文将详细介绍如何使用Python operator模块中的函数进行归约操作。 使用方法 在使用operator模块进行归约操作时,需要先导入它: import operator 接下来可以使用operat…

    python-answer 2023年3月25日
    00
  • Python中的FTP通信模块ftplib的用法整理

    Python中的FTP通信模块ftplib的用法整理 什么是ftplib? ftplib是Python中的一个标准库,用于实现FTP协议的客户端。ftplib封装了FTP命令,使得Python程序能够方便地与FTP服务器进行通信。 ftplib的基本使用 用Python程序连接FTP服务器的步骤如下: 使用import ftplib导入ftplib模块 使用…

    python 2023年6月3日
    00
  • 详解python列表(list)的使用技巧及高级操作

    当然,我很乐意为您提供有关Python列表的详细信息。下面是一个完整攻略,其中包含有关Python列表的高级使用技巧和示例说明。 详解Python列表(list)的使用技巧及高级操作 Python列表是一种非常有用的数据类型,可以存储多个值,并且非常灵活。在本攻略中,我们将深入了解Python列表的高级使用技巧和操作。 列表推导式 列表推导式是一种简洁的语法…

    python 2023年5月13日
    00
  • 解决Python 异常TypeError: cannot concatenate ‘str’ and ‘int’ obj…

    解决Python异常TypeError: cannot concatenate ‘str’ and ‘int’ objects 在Python中,当我们尝试将字符串和整数拼接在一起时,可能会出现以下异常: TypeError: cannot concatenate ‘str’ and ‘int’ objects 这是因为Python不允许将字符串和整数直接拼…

    python 2023年5月13日
    00
  • Python – 打印脚本运行时间:每 1 或 10 分钟

    【问题标题】:Python – Print script running time: each 1 or 10 minutePython – 打印脚本运行时间:每 1 或 10 分钟 【发布时间】:2023-04-03 12:27:02 【问题描述】: 我正在运行需要 10-80 分钟的脚本。我希望能够每 1/5/10 分钟打印一次脚本运行时间(我选择)。 …

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部