CTF中常用编码

在ctf中crypto题中,需要用到大量的各种编码解码,而且基本上需要使用python编写,因此,希望记录下来,方便日后查看。

ASCII

1
2
ord(asciiChar)//得到对应ascii值
chr(asciiNum)//得到对应ascii码

BASE64/32/16

可以将8位字节转化为6位,5位,4位。常用的为64位编码。模块为base64

1
2
3
4
import base64
code=b"abc"
code2b64=base64.b64encode(code)//b'YWJj'
b642code=base64.b64decode(code2b64)//b'abc'

/x??

十六进制编码,对应的其实是ascii码,写成这样是为了避免不必要的截断。在python当中使用正则表达式匹配,转化为十进制值,在使用chr即可。

XXencode/UUencode

这两个编码原理都是一样的,以三个字节作为分组,共24bit,24bit分为四组,每组6bit,对应0~63中某个值。两者的区别在于这64个值的对应表不一样。UUencode对应关系为+32的ascii码,XXencode自行谷歌。

URL编码

url编码又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理。原理其实就是ascii对应的hex前面加上%。

1
2
3
4
import urllib.parse
code=',)$DD'
code2url=urllib.parse.quote(code)
url2code=urllib.parse.unquote(code2url)

至于中文的url编码问题,不具体展开,有兴趣请移步这里

Unicode编码

python当中所有原始字符串都是由unicode字符组成的,我们看到的比如utf-8,其实都是这些unicode字符encode而来的。在python当中,unicode字符的格式为\u????。因此,当遇到一些非python的unicode字符格式时,可以通过正则提取然后在加以转换。
由于这在python当中处理有一定困难,可用在线工具替代。

HTML编码

HTML对某些特殊符号会进行编码

1
2
import html.parser
h2t=html.parser.unescape(""")//"