ASCII编码

Base家族

常用的编码,最常用base64
Base:base16、base32、base36、base58、base62、base64、base85、base91、base92、base128

base64

Base64编码是使用64个可打印ASCII字符(A-Z、a-z、0-9、+、/)将任意字节序列数据编码成ASCII字符串,另有“=”符号用作后缀用途。
Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’。
为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来

字符集:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
填充字符:
=
使用:

1
2
3
4
5
6
7
import base64

str1 = 'hello' # 使用时接受byte数据
str2 = base64.b64encode(str1.encode("utf-8"))
print(str2) # b'aGVsbG8='
str3 = base64.b64decode(str2.decode("utf-8"))
print(str3) # b'hello'

base16

1.Base16编码使用16个ASCII可打印字符(数字0-9和字母A-F)对任意字节数据进行编码。
2.Base16先获取输入字符串每个字节的二进制值(不足8比特在高位补0),然后将其串联进来再按照4比特一组进行切分,将每组二进制数分别转换成十进制
3.8比特数据按照4比特切分刚好是两组,所以Base16不可能用到填充符号“=”。

字符集:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
填充字符:
=
使用:

1
2
3
4
5
6
7
import base64

str1 = 'hello'
str2 = base64.b16encode(str1.encode("utf-8"))
print(str2) # b'68656C6C6F'
str3 = base64.b16decode(str2.decode("utf-8"))
print(str3) # b'hello'

base32

Base32编码是使用32个可打印字符(字母A-Z和数字2-7)

字符集:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
填充字符:
=
使用:

1
2
3
4
5
6
7
import base64

str1 = 'hello'
str2 = base64.b32encode(str1.encode("utf-8"))
print(str2) # b'68656C6C6F'
str3 = base64.b32decode(str2.decode("utf-8"))
print(str3) # b'hello'

base36

base36编码是使用0~9的数字,加上所有26个字母,所有的字母要不全大写,要不全小写。

base58

字符为:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
去掉:0 O l
58=9个阿拉伯数字(去掉0)+24个大写字母(去掉I和O)+25小写字母(去掉l)

字符集:

填充字符:
=
使用:

1

base62

Base62编码是由10个数字、26个大写英文字母和26个小写英文字母组成

字符集:

填充字符:
=
使用:

1

base85

字符集:

填充字符:
=
使用:

1

base91

从94个可打印ASCII字符(0x21-0x7E)中,以下三个字符被省略以构建base91字母:

-(破折号,0x2D)
\(反斜杠,0x5C)
‘(撇号,0x27)

字符集:

填充字符:
=
使用:

1

base92

比base91 多一个字符 〜

字符集:

填充字符:
=
使用:

1

base128

字符集:

填充字符:
=
使用:

1

Base集成

说明:

py:

1

shellcode编码

恺撒密码

在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

例子:位移量3
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

加密:原字符串通过26个字母按偏移量位移生成新的字母从而生成加密字符串
解密:通过加密原理可以得出只要知道偏移量就可以逆序输入原字符串,由于加密原理比较简单,也可以通过爆破26次来输出所有结果,从输出中判断原字符串

shell:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import string
def Caesar(str, number):
lower = string.ascii_lowercase # 小写字母
upper = string.ascii_uppercase # 大写字母
before = string.ascii_letters # 原始字典表
after = lower[number:] + lower[:number] + upper[number:] + upper[:number] # 转换对照密码表
table = ''.maketrans(before, after) # 生成对应密码表
return str.translate(table) # 将字符串按对照密码表进行转换
def ForceCaesar(str): # 恺撒暴力破解
for i in range(26): # 遍历26次 27次将重合
ls = Caesar(str, i) # 恺撒破解
print("ROT{:02}:{}".format(i, ls))
def CaesarEncode():
str = input("加密字符串:") # 测试输入1 this is Caesar
n = eval(input("加密位移数:")) # 20
result = Caesar(str, n) # 恺撒加密
print("加密后字符串:{}\n".format(result))
def CaesarDecode():
str = input("爆破字符串:") # 测试输入2 nbcm cm Wuymul
ForceCaesar(str) # 暴力破解

if __name__ == '__main__':
try:
CaesarEncode() # 恺撒加密
CaesarDecode() # 恺撒解密
except:
print("输入有误!")

培根密码

unicode编码

URL编码

希尔加密