base92解码(python3实现base92加解码)
2020-02-03 04:14
2061 查看
base92解码(python3实现base92加解码)
起因
之前由于更新python3,导致了base92原作者的模块无法兼容python3,网上找了好多解决方法,均为找到python3相关的base92模块,看到原作者写的python2的base92模块最新的已经使7年前了,并且未找到兼容python3的,于是突发奇想,改造了下原python2的代码,新打包成了python3版本的base92包,仅供学习交流用。
项目地址
下载地址
维护
由于该修改未打算作为项目目的,仅用作学习交流和小程序使用,所以没有发布到PyPi,大家如果有西纳想用的小伙伴需要自行去Github下载,然后离线安装,无法用pip install
并且在未影响到常规用的情况下不打算做更多完善,需要用于发行项目的小伙伴可以去支持原作者
安装方法:
- 下载完毕后找到 py3base92_setup 文件夹打开
- windows下直接双击 install.bat 即可安装,或者进入到该目录然后运行 python setup.py install 即可
- linux下安装直接进入到setup.py存在的目录然后执行python setup.py install 即可
- 安装完毕后用 import py3base92 语句导入模块测试,若无报错即安装成功
使用方法
函数:
b92encode() / encode() / base92_encode() 等价
b92decode() / decode() / base92_decode() 等价
样例代码:
import py3base92 print(py3base92.encode("test")) print(py3base92.b92encode("test")) print(py3base92.base92_encode("test")) print(py3base92.decode("Jw_@V")) print(py3base92.b92decode("Jw_@V")) print(py3base92.base92_decode("Jw_@V"))
目前已知问题
部分不可见字符及中文加解码会出现问题,常规使用不会出现影响
base92 alphabet:如下
!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}
测试样码通过率
alphabet 可视字符测试
样例通过率 100% (10000次随机测试)
##该样例通过率100% if __name__=='__main__': import random sum=0 for i in range(10000): randoms=random.randint(0,92) strs=''.join(random.sample([' ','!','#','$','%','&','\'','(',')','*','+',',','-','.','/','0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[','\\',']','^','_','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','{','|','}'],randoms)) #print(type(strs)) result=encode(strs) #print(result) result2=base92_decode(result.replace('\\\\','\\')) #print(result2) if strs==result2: #print("pass") sum+=1 print("testNum:10000, pass:"+str(sum))
原作者样例测试代码(稍作修改,生成的范围未变,可以作为参考)
样例通过率 8% (10000次随机测试)
python3的主要是面向str型的可视字符,所以原测试样例通过率并不高
#该样例通过率约为8% if __name__ == "__main__": import doctest doctest.testmod() ## more correctness tests import hashlib import random def gen_bytes(s): return hashlib.sha512(s).digest()[:random.randint(1,64)] sum=0 for i in range(10000): s = gen_bytes(str(random.random()).encode()) if type(s)==type(b'aa'): result=encode(s) #print(result) result2=base92_decode(result.replace('\\\\','\\')) #print(result2) if s!=result2.encode(): #print("error") sum+=1 else: result=encode(s) #print(result) result2=base92_decode(result.replace('\\\\','\\')) #print(result2) if s!=result2: #print("error") sum+=1 print(sum)
测试结论,尽可能避免bytes类型使用,str类型可满足使用。
- 点赞 2
- 收藏
- 分享
- 文章举报
相关文章推荐
- JavaScript实现的base62 encode/decode,用于页面上直接对作为参数传递的url本身的编码和解码。
- python探索之BaseHTTPServer-实现Web服务器介绍
- Python环境搭建与连接SQL Server类MyDBase的实现
- webuploader+python3(BaseHTTPRequestHandler)实现图片文件的上传与接收存储
- 栅栏密码解码python实现
- python 实现 urlencode 与 urldecode (中文及特殊字符编解码)
- python实现base64编码、解码
- 用Python来实现Base64编码和解码
- python 实现的huffman 编码压缩,解码解压缩
- python中json与dict的互相转换(编码与解码)及其简单实现
- base64解码 python实现
- Python简单实现Base64编码和解码的方法
- Python2.x 利用urllib.quote实现url地址编码解码
- 如何用python解码base32/base64
- 实现URL编码解码的python程序_Linxh_百度空间
- 实现URL编码解码的python程序
- 用windows7搭建FTP服务器并且用python实现对FTP服务器的一系列
- python3实现字符串操作的实例代码
- python使用tkinter库实现五子棋游戏
- Python静态方法实现单实例模式