Skip to main content

用于创建任意二进制编码的库。包括 base32、base64、base85 等的变体。

项目描述

基于py的

用于创建任意二进制编码的库。包括 base32、base64、base85 等的变体。

警告:虽然这些编码确实可以端到端工作,但它们与传统实现不兼容!

我正在努力找出原因。

编码

类型

  • 滑动:随机访问按位实现,理论上兼容任意大小的字节串。
  • BigInt:将字节转换为大整数,然后以基数递增。与大文件不兼容。适用于散列和较短的字节串。
  • Biterator:遍历输入流中的每个字节并将其添加到缓冲区,然后提取所需的位数以转换为其他基数。大致基于 CPython 的 base64 编码器,但经过大量修改以启用任意转换。在制品。

可用编码

支持的编码
ID类型位/字符字符/字节字母
base32咬合器55ABCDEFGHIJKLMNOPQRSTUVWXYZ234567
base32hex咬合器550123456789ABCDEFGHIJKLMNOPQRSTUV
base46大整数不适用不适用ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz
base62大整数不适用不适用0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
base64咬合器63ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
base64b64咬合器63./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
base64bash咬合器630123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_
base64bcrypt咬合器63./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
base64hqx咬合器63!"#$%&'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr
base64url咬合器63ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
base64uu咬合器63 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
base64xx咬合器63+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
基地85咬合器77ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+-;<=>?@^_`{|}~
base94大整数不适用不适用!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
克罗克福德32咬合器550123456789ABCDEFGHJKMNPQRSTVWXYZ
地理哈希32咬合器550123456789bcdefghjkmnpqrstuvwxyz
任天堂32咬合器550123456789BCDFGHJKLMNPQRSTVWXYZ?
wordsafe32咬合器5523456789CFGHJMPQRVWXcfghjmpqrvwx
zbase32咬合器55ybndrfg8ejkmcpqxot1uwisza345h769

地位

支持的编码
标准编码解码通过测试
base32JBSWY3DPFQQHO33SNRSCC===b'Hello, world!'
base32hex91IMOR3F5GG7ERRIDHI22===b'Hello, world!'
base46GnNaagudEKYvFzFrZSSb'Hello, world!'
base621wJfrzvdbthTq5ANZBb'Hello, world!'
base64SGVsbG8sIHdvcmxkIQ==b'Hello, world!'
base64b64G4JgP4wg65RjQalY6E==b'Hello, world!'
base64bashi6lIr6YI87tLsCNA8g==b'Hello, world!'
base64bcryptQETqZE6qGFbtakviGO==b'Hello, world!'
base64hqx5'9XE'mX)(G[FQaN)3==b'Hello, world!'
base64urlSGVsbG8sIHdvcmxkIQ==b'Hello, world!'
base64uu2&5L;&\\L('=O<FQD(0b'Hello, world!'
base64xxG4JgP4wg65RjQalY6E==b'Hello, world!'
基地85
base94/P\|?l:+>Nq\\sr<+rb'Hello, world!'
克罗克福德3291JPRV3F5GG7EVVJDHJ22b'Hello, world!'
地理哈希3291kqsv3g5hh7fvvkejk22b'Hello, world!'
任天堂3291LQSW3H5JJ7GWWLFKL22b'Hello, world!'
wordsafe32F3Wgjq5Q7RR9PqqWMVW44b'Hello, world!'
zbase32jb1sa5dxfoo8q551pt1nnb'Hello, world!'
错误:
base85: c = 99, len = 85, bpc = 7

入门

$ pip install pybased

做事

# Lets's assume we want to use the Crockford32 encoding scheme.
from based.standards.base32 import crockford32

# And let's assume the variable data has what we want to encode.
data: bytes = ...

# Encode to string.
encoded: str = crockford32.encode_bytes(data)

# ...

# Decode the string back to bytes.
data: bytes = crockford32.decode_bytes(encoded)

based命令行工具

$ based --help
usage: based [-h] {dump,encode,decode} ...

positional arguments:
  {dump,encode,decode}

optional arguments:
  -h, --help            show this help message and exit

注意: CLIbased工具目前仅用于测试,并且正在非常活跃的开发中。

将字符串编码为 Base94

$ based encode --standard=base94 --input-string 'Hello, world!'
/P|?l:+>Nq\sr<+r

将字符串编码为 Base94 并输出 JSON

$ based encode --standard=base94 --input-string 'Hello, world!' --output-format json
{"encoded": "/P|?l:+>Nq\\sr<+r"}

从 Base94 解码数据

$ based decode --standard=base94 --input-string '/P|?l:+>Nq\sr<+r'
>>> input chars: 16B
Bytes representation: b'Hello, world!'
Hex representation: 48656c6c6f2c20776f726c6421

各种输出编码格式

$ based decode --standard=base94 --input-string '/P|?l:+>Nq\sr<+r' --output-format json
>>> input chars: 16B
{"b64": "SGVsbG8sIHdvcmxkIQ==", "utf-8": "Hello, world!"}
$ based decode --standard=base94 --input-string '/P|?l:+>Nq\sr<+r' --output-format yaml
>>> input chars: 16B
encoded: !!binary |
  SGVsbG8sIHdvcmxkIQ==

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pybased-0.0.2.tar.gz (16.6 kB 查看哈希)

已上传 source

内置分布

pybased-0.0.2-py3-none-any.whl (20.3 kB 查看哈希)

已上传 py3