首先,我们需要了解什么是摘要算法以及什么是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技术站