版本
- python-3.6.8
- pyjwt-1.7.1
base64(二进制可视化)HASH(加密)
base64
功能: 二进制可视化.
原理:
- 将字符串拆成每三个字符一组
- 计算每一个字符对应的ASCII码二进制
- 将8位的二进制码,按照每6位一组重新分组(不足6位的在后面补0)
- 计算对应的十进制编码
- 按照base64表,查看对应的字符(不足4位的在后面补=)
方法:
- b64encode()/b64decode()
- urlsafe_b64encode()/urlsafe_b64decode() # 功能同上 进行url的字符串编码 +'替换成 '-',将'/'替换成'_'
SHA-256
功能: 安全散列算法的一种(hash)
s = hashlib.sha256()
s.update(b'xxxx')
s.digest()
- update() 在之前运算基础上累加计
python dict/set实现
-
根据key进行一次hash计算
-
增
- 计算数组中的位置 hash(key)=16进制定长计算出索引位置
- 位置为空 则添加
- hash小概率计算结果重复 则hash(key+索引)再次计算 然后重新分配(哈希碰撞)
- 计算数组中的位置 hash(key)=16进制定长计算出索引位置
-
删除
- 找到当前位置 有值 伪删除
- 找到当前位置 标记被删除过 向下探测链
-
扩容
空闲位置少于1/3进行自动扩容 重新排座位
hmac(加盐)
功能**: 使用散列算法同时结合一个加密密钥
h = hmac.new(key, str, digestmod='SHA256 ')
h.digest()
RSA256 非对称加密
- 加密: 公钥加密, 私钥解密
- 签名: 私钥签名, 公钥验证
JWT 组成
- header(多台服务器发送token时 解析alg得到指定加密方式)
{'alg':'HS256','typ':'JWT'}
- payload
{
'exp': xxx, # Expiration Time 此token的过期时间的时间戳
'iss': xxx,# (Issuer) Claim 指明此token的签发者
'aud': xxx, #(Audience) Claim 指明此token的
'iat': xxx, # (Issued At) Claim 指明此创建时间的时间戳
'aud': xxx, # (Audience) Claim 指明此token签发面向群体
...
'uid': 1
}
- signature 签名 HS256(key , base64_header + '.' +base64_payload)
- jwt结果 base64(header) + '.' + base64(payload) + '.' + base64(sign)
JWT效验
- 解析header, 确认alg
- 重复JWT组成步骤3 比对signature 判断是否被篡改
- 获取payload自定义内容
测试地址:
jwt.io/