Python_ASCII码和进制进行转换练习_Python自学第十二节
练习一:
666c61677b616537333538376261353662616566357d
, ①利用print函数直接输出flag。②将flag存放到变量里,最后输出变量的值。思路:十六进制转换成10进制——十进制转换成ASCII码。
方法一:
>>> a = '666c61677b616537333538376261353662616566357d'
>>> len(a) #len()函数查看a变量的长度,共计44个字符
44
>>> for i in range(0,len(a),2): #从0开始,到44结束,因为左闭右开,从0开始,不包含44
# ... print(a[i:i+2]) #第一次取值为0,0:2,取0到1位。第二次取值2,2:4取2到3位,依次取值
# ... print(int(a[i:i+2],16)) #把出来成对的值转换为十进制数
# ... print(chr(int(a[i:i+2],16))) #把十进制转换为ASCII码
... print(chr(int(a[i:i+2],16)),end='') #end参数变为空,禁止换行
...
flag{ae73587ba56baef5}>>> #解出最终的flag
方法二:
>>> a = '666c61677b616537333538376261353662616566357d'
>>> flag = '' #给flag定义变量为空值
>>> for i in range(0,len(a),2):
... flag = flag + chr(int(a[i:i+2],16)) #flag = flag累加依次输出的ASCII码字符
...
>>> flag
'flag{ae73587ba56baef5}'
练习二:
d4e8e5a0f1f5e9e3eba0e2f2eff7eea0e6eff8a0eaf5edf0a0eff6e5f2a0f4e8e5a0ece1faf9a0e4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0c2c4c3d4c6fbd9b0f5dfe1f2e5dff3ede1f2b7fd
要求:需要将每一组二进制数最高位的1去掉,也就是转换成十进制之后再减去128。
2的七次方为128,每组转换十进制数都减去128寓意二进制去掉了最高位的1。具体代码如下
>>> for i in range(0,len(a),2):
... print(chr(int(a[i:i+2],16)-128),end='') #每组十进制数减去128
...
The quick brown fox jump over the lazy dog! The flag is: BDCTF{Y0u_are_smar7}>>>
练习三:
d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o164 b1101001 x6d o145 x7e
以上内容包含了二进制,八进制,十进制,十六进制数,如何转换成为ASCII码?
#!/usr/bin/python3
a = 'd87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o164 b1101001 x6d o145 x7e'
b = a.split() #用split函数切割a为列表的形式
flag = '' #定义flag变量为空
for i in b: #i值在列表b内进行循环
if i[0] == 'd': #如果字符段第一位为d
flag = flag + chr(int(i[1:],10)) #则认为是十进制数,转换成ASCII码累加到flag变量
elif i[0] == 'x': #如果字段符第一位为x
flag = flag + chr(int(i[1:],16)) #则认为是十六进制数,转换成ASCII码累加到flag变量
elif i[0] == 'o': #如果字段符第一位为o
flag = flag + chr(int(i[1:],8)) #则认为是八进制数,转换成ASCII码累加到flag变量
elif i[0] == 'b': #如果字段符第一位为b
flag =flag + chr(int(i[1:],2)) #则认为是二进制数,转换成ASCII码累加到flag变量
print(flag) #最后输出flag变量
[root@localhost python]# ./test5.py
Welcome to kelaibei. Give you a flag as a gift. flag{1e4bf81a6394de5abc005ac6e39a387b} . Have a good time~
练习四:
011001100110110001100001011001110111101101111010011010000100010101100011001110010011000000110011001101000110101001101111011001000111001101101010011001100110111101110011011010110110111101111101
题意:二进制转换成ASCII码
方法一
>>> a = '011001100110110001100001011001110111101101111010011010000100010101100011001110010011000000110011001101000110101001101111011001000111001101101010011001100110111101110011011010110110111101111101'
>>> for i in range(0,len(a),8):
... print(chr(int(a[i:i+8],2)),end='')
...
flag{zhEc9034jodsjfosko}>>>
方法二:
>>> flag = ''
>>> for i in range(0,len(a),8):
... flag = flag + (chr(int(a[i:i+8],2)))
...
>>> flag
'flag{zhEc9034jodsjfosko'
解释:
for i in range(0,len(a),8):
从0~192内循环,步长为8。print(chr(int(a[i:i+8],2)),end='')
a[i:i+8]
指:i取值为0,a[0:8],取编号0~7的8个数。i取值为8,a[8:16],取编号8~15的8个数。
回顾:
表达式int(‘11111’, 2)的含义。
11111为二进制数,转换为十进制数
表达式chr(ord(‘D’)+2)的含义。
ord返回D的ASCII码,再加上2再转换成ASCII对应字符
表达式isinstance(‘Hello world’, str)的含义。
查询 Hello word 是否属于 字符str类
表达式’abc’ in ‘abcdefg’的值为?
True
表达式‘Hello World’[-5:]的值为?
'W'
相关文章
- python要不要装pycharm-Python和pyCharm安装
- python实现矩阵的转置_Python实现矩阵转置的方法分析
- python进制转换函数-Python中进制转换函数的使用
- Python表白代码合集:5种表白代码,找不到对象你来找我,这也太秀了叭
- python中bool函数_bool()函数以及Python中的示例
- python在线代码编辑器-5种最佳Python IDE和代码编辑器
- 【说站】python tqdm是什么
- 【说站】python基本颜色代码
- 【说站】python集合的底层实现
- python读取pkl_Python 读取文件
- 树莓派python编程入门与实战_树莓派python软件
- python 图像处理库_Python图像处理库
- Python 生成随机数_python 随机字符串
- Python中使用数据类型进行转换命令
- opencv(4.5.3)-python(十四)--形态学转换
- (二)Python基础结构
- KG4Py:Python代码知识图谱和语义搜索的工具包
- Python 读取配置文件常用几种方式
- 有没有一个在线工具可以将Python代码转换为Java代码?
- python进阶详解元类及其应用2编程语言
- Linux系统如何运行Python脚本(linux执行python脚本)
- python-模块-tkinter详解编程语言
- python库——Turtle详解编程语言
- python之协程详解编程语言
- Python如何连接PostgreSQL数据库?(python连接postgresql)
- Connecting to MSSQL with Python: A Comprehensive Guide for Beginners(python连接mssql)
- 从 Python 连接到 MySQL:实现更多强大的数据库应用(python和mysql)
- Linux下运行Python脚本的步骤简介(linux如何运行python脚本)
- Python的print用法示例
- python转换摩斯密码示例