base全家桶的安装使用方法

base编码是Binary-to-text encoding的一种实现方法,它可以把二进制数据(含不可打印的字符)编码成可打印字符序列。

本文会不定时收录“base全家桶”:base64、base32、base16、base58、base91、base92、base36、base62、base85、base128等。

收录BaseHash(包含base36、base52、base56、base58、base62、base94)

0x01 base64

安装:python2.7自带

alphabet:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

padding:

=

使用:

import base64
c=base64.b64encode('pcat.cc')
m=base64.b64decode(c)
print c,m

0x02 base32

安装:python2.7自带

alphabet:

ABCDEFGHIJKLMNOPQRSTUVWXYZ234567

padding:

=

使用:

import base64
c=base64.b32encode('pcat.cc')
m=base64.b32decode(c)
print c,m

0x03 base16

安装:python2.7自带

alphabet:

0123456789ABCDEF

使用:

import base64
c=base64.b16encode('pcat.cc')
m=base64.b16decode(c)
print c,m

注意:

当b16decode的参数含有小写字母时,需要传入第二个参数True

base64.b16decode('706361742e6363',True)

或者使用python2.7的.decode('hex')则无须考虑大小写。

'706361742e6363'.decode('hex')

0x04 base58

github项目:https://github.com/keis/base58

安装:

pip install base58

alphabet:

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

使用:

import base58
c=base58.b58encode('pcat.cc')
m=base58.b58decode(c)
print c,m

0x05 base91

网址:http://base91.sourceforge.net/

github项目:https://github.com/aberaud/base91-python

安装:

pip install base91

alphabet:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~"

使用:

import base91
c=base91.encode('pcat.cc')
m=base91.decode(c)
print c,m

0x06 base92

github项目:https://github.com/thenoviceoof/base92

安装:

pip install base92

alphabet:

!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}

a special denotation (an empty string):

~

使用:

import base92
c=base92.encode('pcat.cc')
m=base92.decode(c)
print c,m

注意:

encode,b92encode,base92_encode是一样的,
decode,b92decode,base92_decode是一样的。

0x07 base36

github项目:https://github.com/tonyseek/python-base36

安装:

pip install base36

alphabet:

0123456789abcdefghijklmnopqrstuvwxyz

使用:

import base36
c=base36.loads('pcat')
assert type(c)==int
m=base36.dumps(c)
print c,m

注意:

dumps函数接收的参数类型为int

0x08 base62

github项目:https://github.com/suminb/base62

安装:

pip install pybase62

alphabet:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

使用:

import base62
m=base62.decode('pcat')
assert type(m)==int
c=base62.encode(m)
print c,m

c=base62.encodebytes('pcat.cc')
m=base62.decodebytes(c)
print c,m

注意:

encode函数接收的参数类型为int

0x09 base85

base85种类:

  • ASCII85 encoding. This is the default. 0x00000000 is compressed to z. Spaces are not compressed.
  • Adobe ASCII85 encoding is same as previous except data is enclosed between <~ and ~> .
  • ZeroMQ (Z85) encoding. NOTE! Even though specification says input length must be divisible by 4, this is not currently enforced. Spaces and zeroes are not compressed.
  • Character set from RFC1924 which is an April fools joke. Spaces and zeroes are not compressed.

(1) github项目

https://github.com/tuupola/base85

安装:

请先安装PHP的Composer,再

composer require tuupola/base85

使用:

(下面代码分别对应上面4种类型)

<?php
require __DIR__ . '/vendor/autoload.php';
use Tuupola\Base85;

$m='pcat.cc';

$ascii85 = new Base85([
    "characters" => Base85::ASCII85,
    "compress.spaces" => false, "compress.zeroes" => true
]);
print $ascii85->encode($m) . PHP_EOL;

$adobe85 = new Base85([
    "characters" => Base85::ASCII85,
    "compress.spaces" => false, "compress.zeroes" => true,
    "prefix" => "<~", "suffix" => "~>"
]);
print $adobe85->encode($m) . PHP_EOL;

$z85 = new Base85([
    "characters" => Base85::Z85,
    "compress.spaces" => false, "compress.zeroes" => false
]);
print $z85->encode($m) . PHP_EOL;

$rfc1924 = new Base85([
    "characters" => Base85::RFC1924,
    "compress.spaces" => false, "compress.zeroes" => false
]);
print $rfc1924->encode($m) . PHP_EOL;

(2) python3中base64模块自带

#!/usr/bin/env python3
import base64
c=base64.a85encode(b'pcat.cc')
m=base64.a85decode(c)
print(c,m)

c=base64.b85encode(b'pcat.cc')
m=base64.b85decode(c)
print(c,m)

注意:

python3中的a85encode和b85encode分别对应上面4种类型的第1和第4种。

0x0a base128

github项目:https://github.com/rpuntaie/base128

安装:

git clone https://github.com/rpuntaie/base128
cd base128
python3 setup.py install

另外需要先安装bitarray(在windows里安装麻烦)

pip install bitarray

alphabet:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\xb5\xb6\xb7\xbc\xbd\xbe\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff

使用:

#!/usr/bin/env python3
import base128
b128=base128.base128(chars=None, chunksize=7)
c=list(b128.encode(b'pcat.cc'))
m=b''.join(b128.decode(c))
print(c,m)

注意:

  • chars至少128字节,如果为None,则使用base128.base128.defaultchars
  • chunksize必须是7的倍数,且小于128。

0x0b BaseHash

BaseHash is a small library for creating reversible obfuscated identifier hashes to a given base and length. The project is based on the GO library, PseudoCrypt by Kevin Burns. The library is extendible to use custom alphabets and other bases. github项目:https://github.com/calve/python-basehash

安装:

pip install basehash

alphabet:

BASE36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
BASE52 = '0123456789BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz'
BASE56 = '23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz'
BASE58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
BASE62 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
BASE94 = '!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'

(跟前面所介绍的相比,base36的alphabet的小写字母变成大写,base62相同。)

使用:

from basehash import *
print base36().decode('PCAT')
print base52().decode('pc4t')
print base56().decode('pcat')
print base58().decode('pcat')
print base62().decode('pcat')
print base94().decode('pcat.cc')