您好,欢迎来到99网。
搜索
您的当前位置:首页pythonbase.bdecode等号可以随便加

pythonbase.bdecode等号可以随便加

来源:99网
pythonbase.bdecode等号可以随便加

由于 = ⽤在URL,cookie⾥会造成歧义,所以base编码的时候,会把 = ⾃动去掉。

解码的时候,如果传⼊的⼆进制编码长度⼩于4的倍数,那么需要在后⾯补=,知道满⾜长度等于4的倍数,然后再解码请写⼀个能处理去掉=的base解码函数:

这是我第⼀次写的,运⾏之后并没有发现什么错误:

import base

def safe_base_decode(s): for i in range(len(s) % 4): s += b'='

return base.bdecode(s)

# 测试:

assert b'abcd' == safe_base_decode(b'YWJjZA========'), safe_base_decode(b'YWJjZA==')assert b'abcd' == safe_base_decode(b'YWJjZA'), safe_base_decode(b'YWJjZA')assert b'aU' == safe_base_decode(b'YVU'), safe_base_decode(b'YVU')

assert b'HHL2' == safe_base_decode(b'SEhMMg'), safe_base_decode(b'SEhMMjIy')assert b'HHL222' == safe_base_decode(b'SEhMMjIy'), safe_base_decode(b'YWFLS0w')assert b'0' == safe_base_decode(b'MA'), safe_base_decode(b'MA')print('ok')

然后我去看了下被⼈是怎么实现的,发现有很多实现⽅法,有的和我的⼀样,有的不⼀样,然后就发现了这个现象:其实后⾯加多少 = 都没有关系,

然后我就改成下⾯这样,运⾏后也ok:

import base

def safe_base_decode(s):

return base.bdecode(s + b'=' * 3) # 4的最⼤余数就是3,所以最多需要补3个

# 测试:

assert b'abcd' == safe_base_decode(b'YWJjZA========'), safe_base_decode(b'YWJjZA==')assert b'abcd' == safe_base_decode(b'YWJjZA'), safe_base_decode(b'YWJjZA')assert b'aU' == safe_base_decode(b'YVU'), safe_base_decode(b'YVU')

assert b'HHL2' == safe_base_decode(b'SEhMMg'), safe_base_decode(b'SEhMMjIy')assert b'HHL222' == safe_base_decode(b'SEhMMjIy'), safe_base_decode(b'YWFLS0w')assert b'0' == safe_base_decode(b'MA'), safe_base_decode(b'MA')print('ok')

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务