python 在ctf进制转换的应用
-
4进制转换(题目来源bugku)
由于是4进制,满4进一,从右往左依次对应4的0,1,2,3.....次方
列如:1212 转换为10进制
1 × 4^3 + 2 × 4^2 + 1 × 4^1 + 2 × 4^0 = 64 + 32 + 4 + 2 = 102
所以python脚本如下:
#!/usr/bin/python # -*- coding=utf8 -*- """ # @Author : pig # @CreatedTime:2020-01-10 22:39:14 # @Description : """ m = "" with open("4_进制.txt", "r") as f: text = f.read() c = text.split(" ") for i in c: temp = 0 for j in range(len(i)): temp += int(i[j]) * (4 ** (len(i) - j -1)) m += chr(temp) print (m)
结果如下:
-
8进制转换(题目来源iscc 2019)
题目如下:
通篇都是8进制,这次利用python int自带的函数来解决
转换脚本如下:
#!/usr/bin/python # -*- coding=utf8 -*- """ # @Author : pig # @CreatedTime:2020-01-11 15:46:57 # @Description : """ import base64 m = "" with open("message_进制.txt", "r") as f: text = f.read() c = text.split(" ") for i in c: try: m += chr(int(str(i)[1:],8)) except ValueError: pass print (m) result = base64.b64decode(m.encode('utf-8')) print (str(result, 'utf-8'))
由于第一次解密得到一连串个的base64字符串,所以再加一个base64解密
最后结果如下:
V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K Well done! Flag: ISCC{N0_0ne_can_st0p_y0u}
-
多种进制混合(题目来源2017 山东省赛科莱杯)
题目如下:
有题目得知 d为十进制,x为十六进制,o为8进制,b为二进制
所以脚本编写如下:
#!/usr/bin/python # -*- coding=utf8 -*- """ # @Author : pig # @CreatedTime:2020-01-11 16:08:14 # @Description : """ f = open('kelai_进制转换.txt', 'r') text = f.read().split(' ') m = '' for i in text: if i[0] == 'd': m += chr(int(i[1:])) if i[0] == 'x': m += chr(int(i[1:], 16)) if i[0] == 'o': m += chr(int(i[1:], 8)) if i[0] == 'b': m += chr(int(i[1:], 2)) print (m)
得到结果如下: