计算机相关的编码 ¶

本节介绍一些计算机相关的编码。

字母表编码¶

A-Z/a-z对应1-26或者0-25

ASCII编码¶


特点¶

我们一般使用的ascii编码的时候采用的都是可见字符,而且主要是如下字符

0-9,48-57

A-Z,65-90

a-z,97-122

变形¶二进制编码¶

将ascii码对应的数字换成二进制表示形式。

只有0和1

不大于8位,一般7位也可以,因为可见字符到127。

其实是另一种ascii编码。

十六进制编码¶

将ascii码对应的数字换成十六进制表示形式。

A-Z→0x41~0x5A

a-z→0x61~0x7A

工具¶

jpk,asciitonumber,numbertoascii

例子¶


2018DEFCONQualsghettohackers:Throwback¶

题目描述如下

Anyo!e!howouldsacrificepo!icyforexecu!!onspeedthink!securityisacomm!ditytop!urintoasy!tem!

第一直觉应该是我们去补全这些叹号对应的内容,从而得到flag,但是补全后并不行,那么我们可以把源字符串按照!分割,然后字符串长度1对应字母a,长度2对应字母b,以此类推

ori='Anyo!e!howouldsacrificepo!icyforexecu!!onspeedthink!securityisacomm!ditytop!urintoasy!tem!'sp=('!')printrepr(''.join(chr(97+len(s)-1)forsinsp))

进而可以得到,这里同时需要假设0个字符为空格。因为这正好使得原文可读。

darklogic
题目¶

Jarvis-basic-德军的密码

Base编码¶

basexx中的xx表示的是采用多少个字符进行编码,比如说base64就是采用以下64个字符编码,由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。3个字节就有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。


具体介绍参见Base64-维基百科。

编码man


如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0值在末尾补足,使其能够被3整除,然后再进行base64的编码。在编码后的base64文本后加上一个或两个=号,代表补足的字节数。也就是说,当最后剩余一个八位字节(一个byte)时,最后一个6位的base64字节块有四位是0值,最后附加上两个等号;如果最后剩余两个八位字节(2个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。参考下表:


由于解码时补位的0并不参与运算,可以在该处隐藏信息。

与base64类似,base32使用32个可见字符进行编码,2的5次方为32,所以每5bit为1个分组。5字节为40bit,对应于8个base32分组,即5个字节用8个base32中字符来表示。但如果不足5个字节,则会先对第一个不足5bit的分组用0补足了5bit,对后面剩余分组全部使用“=”填充,直到补满5个字节。由此可知,base32最多只有6个等号出现。例如:


特点¶

base64结尾可能会有=号,但最多有2个

base32结尾可能会有=号,但最多有6个

根据base的不同,字符集会有所限制

有可能需要自己加等号

=也就是3D

更多内容请参见baserfc

工具¶

python库函数

读取隐写信息脚本

例子¶

题目描述参见ctf-challenge中misc分类的base64-stego目录中的文件。

使用脚本读取隐写信息。

importbase64defdeStego(stegoFile):b64table="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"withopen(stegoFile,'r')asstegoText:message=""forlineinstegoText:try:text=line[("=")-1:-1]message+="".join([bin(0ifi=='='(i))[2:].zfill(6)foriintext])[2('=')==2else4:6]except:passreturn"".join([chr(int(message[i:i+8],2))foriinrange(0,len(message),8)])print(deStego(""))

输出:

flag{BASE64_i5_amaz1ng}
题目¶霍夫曼编码¶

参见霍夫曼编码。

XXencoding¶

XXencode将输入文本以每三个字节为单位进行编码。如果最后剩下的资料少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6bit为单位分为4个组,每个组以十进制来表示所出现的数值只会落在0到63之间。以所对应值的位置字符代替。

1234560123456789012345678901234567890123456789012345678901234567890123|||||||+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

具体信息参见维基百科

特点¶

只有数字,大小写字母

+号,-号。

工具¶题目¶URL编码¶

参见URL编码-维基百科。

特点¶

大量的百分号

工具¶题目¶Unicode编码¶

参见Unicode-维基百科。

注意,它有四种表现形式。

例子¶

源文本:The

[Hex]:The

[Decimal]:The

\U[Hex]:\U0054\U0068\U0065

\U+[Hex]:\U+0054\U+0068\U+0065

发布于 2025-08-06 08:59
347
上一篇:备战双十一!2021年双十一全网最值得购买的电脑显示器「附价格」 下一篇:超大平板、学习机、云电脑……这个“智慧中屏”把家变成万能数字舱
目录

    推荐阅读