Skip to content

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)
63

ASCII码相关函数

  • 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')
True
bash
>>> a = 'test.txt'
>>> a.endswith(('.txt', '.sh', 'jpg'))
True

split()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()

Last updated:

Released under the MIT License.