0%

Flask-Login加密过程

草稿:

flask-login类库涉及到flask的session对象,flasksession的源码在flask.sessions中,其中最重要的是open_session,save_session函数。顾名思义,open_session是解密的函数,save_session是加密的函数, 加解密使用的是itsdangerous库,使用到的是URLSafeTimedSerializer类。URLSafeTimedSerializer中重要的函数可以从以下几个开始看:

  • load_payload: decode的数据
  • dump_payload:encode数据
  • make_signer: 创建一个签名类实例,调用signunsign方法来给字符串签名,以及验证签名合法,raise BadSignature,默认会以b'.'来将encode的数据和签名连接起来作为加密后的值。

dump_payload

源码位于URLSafeSerializerMixin.dump_payload, 具体过程如下:

  • 调用超类的dump_payload即json.dumps(obj, separators=(‘,’, ‘:’))
  • 得到json再调用zlib.compress进行压缩, 如果压缩后的长度比原来小就替换
  • 调用itsdangerous.base64_encode函数将json字符串encode,该函数主要是调用`base64.urlsafe_b64encode(b’xxx’).strip(b’=’)
  • 如果json是被压缩过的,在json前加一个b’.’, base64d = b’.’ + base64d,然后将字符串return

load_payload

dupm_payload的反过程

sign

unsign