Python Security Programming
Python安全编程基础(CTF方向)
python介绍
开源
- 官网:www.python.org
- 任何人都可以在Python的基础之上为其增加新的功能(模块)
特点
- 优雅、简单、明确,代码应尽量pythonic。
- 在Python中,一切皆对象。
- Python是一种解释型语言(脚本语言)。
Python数据对象
str
字符串是一个可迭代的数据对象
- 字符串中的每个字符都是一个独立元素,可挨个进行处理。
bash
>>> for i in "who are u!":
... print(i, end = '-')
...
w-h-o- -a-r-e- -u-!->>>bash
>>> a,b,c = '123'
>>> a
'1'
>>> b
'2'
>>> c
'3'字符串切片
从一个字符串中取出指定的某一部分字符串,称为切片。
- 切片格式:[起始下标:结束下标:步长]
- 起始下标默认为0
- 结束下标不包含该下标本身,省略时表示一直取到字符串的终点。
- 步长默认为1
- [::-1]表示逆序
bash
>>> a='python'
>>> a[0:5]
'pytho'
>>> a[::-1]
'nohtyp'
>>> a[:6:2]
'pto'数制转换与ASCII码
数据单位
在计算机内部,所有的数据都是以二进制形式表示。
- bit:位(b),二进制数的1个“0”或1个“1”。
- Byte:字节(B),一个8位的二进制数。
- 更大的数据存储单位:KB、MB、GB、TB、EB、PB……
- 数据传输速率(带宽):bps,比特/秒。
- 数据下载速率:Bps,字节/秒。
数据进制
Python中的数制
- 二进制:以0b作为前缀,0b1010。
- 八进制:以0o作为前缀,0o173。
- 十六进制:以0x作为前缀,0x1f。
- 直接输出这些带前缀的数据,都是将它们转换为十进制数。
bash
>>> 0b0101
5
>>> 0o0101
65
>>> 0x0101
257十进制转换为其它进制
bash
>>> bin(10)
'0b1010'
>>> oct(10)
'0o12'
>>> hex(10)
'0xa'int()函数可将其它进制的数据转换成十进制
- 语法格式:int("被转换的数据",进制)
- 被转换的数据必须要以字符串的形式给出。
bash
>>> int('2C', 16)
44
>>> int('1010', 2)
10
>>> int('77', 8)
63ASCII码相关函数
ord()函数,返回某个字符所对应的ASCII码(用十进制表示)。chr()函数,返回某个十进制数所对应的ASCII码字符。
bash
>>> ord('A')
65
>>> chr(65)
'A'字符串常用方法
startswith()和endswith()方法
bash
>>> b = 'Simple is better than complex'
>>> b.startswith('Sim')
True
>>> b.endswith('lex')
Truebash
>>> a = 'test.txt'
>>> a.endswith(('.txt', '.sh', 'jpg'))
Truesplit() 和 join()
bash
>>> s = 'I love you'
>>> a = s.split()
>>> a
['I', 'love', 'you']
>>> ' '.join(a)
'I love you'replace()
replace()方法可以将字符串中部分指定的字符进行替换。- 字符串属于不可变序列,字符串中的内容不允许改变。
- 通过
replace()方法会生成新的字符串,原先字符串中的内容保持不变。
bash
>>> b ='0010 0100'
>>> b.replace('0','.').replace('1','-')
'..-. .-..'maketrans() 和 translate()方法
maketrans()方法用来生成字符映射表translate()方法按照字符映射表中定义的对应关系,将字符串中的指定字符进行替换。
使用这两个方法的组合可以同时替换多个不同的字符,replace()方法则无法满足这一要求。
bash
>>> morse_table = ''.maketrans('01','.-')
>>> b.translate(morse_table)
'..-. .-..'bash
>>> s = 'ABBAABABAA'
>>> table = ''.maketrans('AB','BA')
>>> s.translate(table)
'BAABBABABB'strip()、rstrip()、lstrip() 方法
strip()方法用于去除字符串首尾指定的字符rstrip()方法用于去除字符串右端指定的字符。lstrip()方法用于去除字符串左端指定的字符。- 默认是去除空格、回车、换行等空白字符
bash
>>> k = ' hello '
>>> k.strip()
'hello'upper()、lower()和 swapcase()方法
upper()方法,将字符串转换成大写形式。lower()方法,将字符串转换成小写形式。swapcase()方法,实现大小写互换。
isupper()和islower()方法
isupper()方法,判断字符串是否是大写字母islower()方法,判断字符串是否是小写字母
isalpha()、isdigit()、isalnum()方 法
isalpha(),判断字符串是否是字母isdigit(),判断字符串是否是数字isalnum(),判断字符串是否是字母或数字
tuple
元组用()表示
- 元组与列表类似,不同之处在于元组中的数据只能被调用,而不能被修改。
元组特点
- 如果元组中只有一个元素,那么在元素的后面必须加上逗号。
- 元组通常用于为函数传递参数,从而防止在函数中修改参数。
- 使用
tuple()函数可以将其它序列转换为元组- 通过
tuple()函数可以实现将列表冻结,而使用list()函数可以实现将元组融化。 - 元组的访问和处理速度比列表更快,如果要对大量数据进行遍历,而不需要对其中的元素进行任何修改,那么建议使用元组而不是列表。
- 通过
模块
模块:把一堆函数代码放到一个文件中,以后备用
tools.py
python
def fool1():
print('执行了, fool1')
def fool2():
print('执行了, fool2')
def fool3():
print('执行了, fool3')
print("tools模块名: ", __name__)
# 判断是否是 入口文件
if __name__ == '__main__':
print('tools 当前文件代码')导入模块或函数
start.py
python
# import tools 导入模块
# import tools as tl 导入模块,起别名
# from tools import fool1, fool2 导入函数
# from tools import fool1 as f1, fool2 as f2
tools.fool1()
tl.fool1()
fool1()
f1()