杂项中加密和编码方式的特点
Base 家族
不同的 Base 系列编码主要区别在于:编码所用到的字符数量不同
自动化工具(BaseCrack)
在
BaseCrack
的帮助下,可以自动识别出 Base 系列的加密,并且还可以一次性对任意模式下的多重 Base 编码数据进行解码BaseCrack 下载地址:basecrack
安装依赖文件:pip3 install -r requirements.txt
运行:python basecrack.py
Base64
64 = $2 ^ {6}$,每 6bit 为一个单元, 使用
64 个 ASCii 可打印字符
(字母 A-Z、字母 a-z、数字 0-9 和 ‘+’、’/‘)
- 码表:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
(另外,'='
用作填充) - 经过 Base64 编码后的字符串长度一定会被4整除(长度包括后缀等号)
- 由于 8bit 数据按照 6bit 切分不一定整除,末尾可能会出现 1 或 2 个
'='
,但'='
不超过两个
Base16
16 = $2 ^ {4}$,每 4bit 为一个单元,使用
16 个 ASCii 可打印字符
(字母 A-F、数字 0-9)
- 由于 8bit 数据按照 4bit 切分刚好是 2 组,所以 Base16 不可能用到填充符号
'='
Base32
32 = $2 ^ {5}$,每 5bit 为一个单元,使用
32 个 ASCii 可打印字符
(字母 A-Z、数字 2-7)
base36
使用
36 个 ASCii 可打印字符
(数字 0-9,26 个字母:A-Z 或 a-z)
- 加密仅支持整数数字,解密仅支持字符串,不支持中文
Base58
使用
58 个 ASCii 可打印字符
(Base64 除去数字'0'
,大写字母'O'
、'I'
,小写字母'l'
,和'+'
、'/'
)
Base62
使用
62 个 ASCii 可打印字符
(数字 0-9、字母 A-Z 和字母 a-z)
Base91
使用
91 个 ASCii 可打印字符
,从 ASCii 字符(0x21 - 0x7E)中除-
(0x2D)、\
(0x5C)、'
(0x27)外的其他 91 个可打印字符组成
MD5
MD5 值是
32位
由数字 0-9,字母 a-f 组成的字符串(也有可能是 16 位
)
- MD5 散列结果是 128bit 固定长度的二进制数据,然后将每 4 个二进制数据转化为 1 个十六进制数据,因此,128 位二进制数据转化为 32 个十六进制数据(128 / 4 = 32),最终以字符串形式呈现
URL 编码
URL 编码中只允许包含英文字母、数字、4 个特殊字符:
- _ . ~
和所有的保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]
- URL 编码后的字符串中含有一些特殊的字符,比如
'%'
、'+'
等,
Brainfuck
Brainfuck 是一种极简单的编程语言,它只包含 8 个命令字符,并且没有任何高级语言的概念,比如函数、变量等
字符 | 含义 |
---|---|
> | 移动指针到向右一个内存单元 |
< | 移动指针到向左一个内存单元 |
+ | 将当前内存单元加 1 |
- | 将当前内存单元减 1 |
. | 输出当前内存单元的值 |
, | 从输入读入一个字符,并将其赋值给当前内存单元 |
[ | 如果当前内存单元的值为 0,则跳转到对应的 ] 之后 |
] | 如果当前内存单元的值不为 0,则跳转到对应的 [ 之前 |
- 用
'>'
、'<'
、'+'
、'-'
、'.'
、','
、'['
、']'
八种符号组成 - 例如:
明文 Hello World!,加密后密文为:++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Ook!
Ook! 是 Brainfuck 的一种变体,它同样只包含 8 个命令字符,但是两两成对,每对命令字符组成一个 “Ook” 单元
符号 | 含义 |
---|---|
Ook? Ook. | 移动指针到向右一个内存单元 |
Ook. Ook? | 移动指针到向左一个内存单元 |
Ook. Ook. | 将当前内存单元加 1 |
Ook! Ook! | 将当前内存单元减 1 |
Ook! Ook. | 输出当前内存单元的值 |
Ook. Ook! | 从输入读入一个字符,并将其赋值给当前内存单元 |
Ook! Ook? | 如果当前内存单元的值为 0,则跳转到对应的 Ook? Ook! 之后 |
Ook? Ook! | 如果当前内存单元的值不为 0,则跳转到对应的 Ook! Ook? 之前 |
- Ook! 和 Brainfuck 的主要区别在于其命令字符是成对出现的,以及 Ook! 的输出是单个字符,而不是 ASCii 码
- 特点是字符串中存在很多
'.'
、'!'
、'?'
符号
凯撒密码
凯撒密码一般适用于 26 个英文字母,根据对字符串中的字符进行移位来实现加密
例如,当偏移量为 3 时,A 被替换成 D,B 被替换成 E,Z 被替换成 C
Rabbit
Rabbit 加密开头部分通常为:
U2FsdGVkX1
- 明显密文里
'+'
比较多,并且经常有'/'
- 例如:
明文 “I Love You 521”,无密钥,加密后密文为:__U2FsdGVkX1__9DvuEo5PvBA8TuLrM2t+EZBvUkzlAa
明文 “I Love You 521”,密钥为 666,加密后密文为:__U2FsdGVkX1__8w6vxXxux/ivRVwo3xMzTxmUyk7cHz
兽语编码
用动物的拟声词或语气词作为加密内容
- 例如:
明文 “我喜欢你”,加密后密文为:呜嗷呜啊嗷嗷呜嗷啊呜啊啊嗷嗷啊呜嗷呜嗷嗷嗷呜嗷~~啊
摩斯密码
摩斯密码使用点
'.'
和划线'-'
两种符号表示摩斯电码中的点和线
- 有时会出现在杂项的音频隐写中,一般在波谱中,用较宽的代表
'-'
,用较窄的代表'.'
,而中间的间隔代表'/'