python3中的编码模块

学习一下如何写解码脚本

Base编码与解码

Python内置的base64模块可以实现base64、base32、base16、base85、ascii85、base-urlsafe加解密

b64encode的参数s的类型必须是字节流(bytes)。b64decode的参数s可以是字节包(bytes),也可以是字符串(str)。

Base64

1
2
3
4
5
import base64
flag = base64.b64encode(b'flag')
print(flag)
flag = base64.b64decode(flag)
print(flag)

输出

b'ZmxhZw=='
b'flag'

可以进行解码得到str数据:

1
2
3
4
flag = base64.b64encode(b'flag').decode('utf-8')
print(flag)
flag = base64.b64decode(flag).decode('utf-8')
print(flag)

输出

ZmxhZw==
flag

Base85

1
2
3
4
5
import base64
flag = base64.b85encode(b'hello').decode('utf-8')
print(flag)
flag = base64.b85decode(flag).decode('utf-8')
print(flag)

输出

Xk~0{Zv
hello

Ascii85

1
2
3
4
5
6
7
8
>>> import base64
>>> flag = base64.a85encode(b'hello').decode('utf-8')
>>> print(flag)
BOu!rDZ
>>> flag = base64.a85decode(flag).decode('utf-8')
>>> print(flag)
hello
>>>

Urlsafe

Base64 默认会使用+和/, 但是这 2 个字符在 url 中也有特殊含义。使用 urlsafe 可以解决这个问题。 +替换为-, /替换为_。

编码解码方式:

base64.urlsafe_b64encode()
base64.urlsafe_b64decode()

Hash

在hashlib库的hash算法中,提供了很多加密算法,有 sha1()、sha224()、sha256()、sha384()、sha512()、blake2b()和 blake2s()、md5()

MD5

Python2.x中有md5模块,此模块调用了hashlib模块,python3.x已中将md5取掉,直接通过调用hashlib模块来进行md5。Python2.x可以直接使用unicode字符,但3.x中必须使用二进制字节串。

1
2
3
4
5
import hashlib

m = hashlib.md5()
m.update(b'hello') #更新hash对象,重复调用则进行拼接
print(m.hexdigest())

输出:

5d41402abc4b2a76b9719d911017c592

也可使用

1
2
3
m = hashlib.new('md5') #加密算法名称
m.update(b'hello')
m.hexdigest()

Sha1

1
2
3
4
5
6
7
8
9
10
11
12
13
import hashlib

m = hashlib.sha1()
m.update(b'hell')
m.update(b'o')
print(m.hexdigest())

#或
'''
m = hashlib.new('sha1')
m.update(b'hello')
m.hexdigest()
'''

输出

aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d

CRC32

1
2
3
4
5
6
7
8
9
10
11
import zlib

s = zlib.crc32(b'hello, world!')
print(s)

#或
'''
import binascii
s = binascii.crc32(b'hello, world!')
print(s)
'''

输出

1486392595

URL编码

python3

编码:

1
2
import urllib.parse
res = urllib.parse.quote(value)

解码:

1
2
import urllib.parse
res = urllib.parse.unquote(value)

python2

编码:

1
2
import urllib
res = urllib.urlencode(value)

解码:

1
2
import urllib
res = urllib.unquote(value)