base92解码(python3实现base92加解码)
起因
之前由于更新python3,导致了base92原作者的模块无法兼容python3,网上找了好多解决方法,均为找到python3相关的base92模块,看到原作者写的python2的base92模块最新的已经使7年前了,并且未找到兼容python3的,于是突发奇想,改造了下原python2的代码,新打包成了python3版本的base92包,仅供学习交流用。
项目地址
下载地址
维护
由于该修改未打算作为项目目的,仅用作学习交流和小程序使用,所以没有发布到PyPi,大家如果有西纳想用的小伙伴需要自行去Github下载,然后离线安装,无法用pip install
并且在未影响到常规用的情况下不打算做更多完善,需要用于发行项目的小伙伴可以去支持原作者
已更新支持bytes类型
可通过 pip install py3-base92
进行安装
安装方法:
1. 下载完毕后找到 py3base92_setup 文件夹打开
2. windows下直接双击 install.bat 即可安装,或者进入到该目录然后运行 python setup.py install 即可
3. linux下安装直接进入到setup.py存在的目录然后执行python setup.py install 即可
4. 安装完毕后用 import py3base92 语句导入模块测试,若无报错即安装成功
执行 pip install py3-base92
安装
import py3base92 导入测试,无报错即安装成功
使用方法
函数:
b92encode() / encode() / base92_encode() 等价
b92decode() / decode() / base92_decode() 等价
样例代码:
import py3base92
temp_str = "helloworld"
encoded_str = py3base92.b92encode(temp_str.encode())
print(encoded_str)
decode_str = py3base92.b92decode(encoded_str)
print(decode_str.decode())
base92字符集
import py3base92
print(py3base92.get_character_set())
!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}
测试样码通过率
alphabet 可视字符测试
样例通过率 100% (10000次随机测试)
##该样例通过率100%
import random
from py3base92 import b92encode, b92decode
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))
result = b92encode(strs.encode())
result2 = b92decode(result).decode()
if strs == result2:
sum += 1
print("testNum:10000, pass:" + str(sum))
随机types校验
样例通过率 100% (10000次随机测试)
#该样例通过率100%
from py3base92 import b92encode, b92decode
import hashlib
import random
def gen_bytes(s):
return hashlib.sha512(s.encode()).digest()[:random.randint(1, 64)]
sum = 0
for i in range(10000):
s = gen_bytes(str(random.random()))
encode_result = b92encode(s)
decode_result = b92decode(encode_result)
if s == decode_result:
sum += 1
print("testNum:10000, pass:" + str(sum))
测试结论,尽可能避免bytes类型使用,str类型可满足使用。
测试结论,bytes支持,全样例通过率100%