用Python处理图像——PIL

发布在 Python

在ctf中也有众多需要处理图片的题目,有时候手动批量处理比较繁琐,有时候人工识别根本不现实。这时候又要进行编程了,而这里用到的库就是PIL(Python Imaging Library)

阅读全文

最近正在研究python3与python2的特性区别,也搜了一些资料,不过好像大家都没有提到python3中函数式编程部分与python2的区别。正好官方文档里面有个howto就说了这一节,稍微看了看,总结了一下python3中FP的特点。(其实就是翻译嘛:))

阅读全文

在Python中实现守护进程

发布在 Python

守护(Daemon)进程是linux中的一种重要的系统管理手段,一般名称都以d结尾,运行在系统的后台,完成一些监控或者服务的工作。在Python中也是可以实现这样的功能,不过现在好像也有外部库支持了,其实也不难。

阅读全文

signal是进程间通信与异步处理的一种手段,当遇到并发性编程或者系统级的控制时,就需要我们能够控制程序的信号处理进程,完成一些额外的工作。

稍微看了一下signal模块的官方文档,从使用上来说还是相当简单的。

阅读全文

Python的数据持久化方式有很多种,比较好用又相对轻量级的就属JSON与Pickle这2种了。其实两者的使用方式非常相近,这里记录下来备忘。

JSON

python中处理JSON的库就是json模块,需要用到的方法大致就是以下4个,其实它们的参数有很多这里暂且省略。

1
2
3
4
5
6
7
8
import json
obj = {'a' : 'b', 'c' : 'd'}
fp = open('obj.json', 'w')
json.dump(obj, fp)
fp.close()
s = json.dumps(obj)
x = json.load(open('obj.json', 'r'))
y = json.loads(s)
阅读全文

上一篇文章介绍了线程内的并发——协程,但有的时候协程也不能解决所有的问题,因为Python自己启用了GIL(全局解释锁,具体是什么还没研究),所以不能发挥多核处理器的优势。所以我想到在进程级别再并发一次好了。

multiprocessing这个库提供了对于多进程的支持,主要就是使用其中的Pool进程池技术。

阅读全文

Python协程库——gevent

发布在 Python

之前一直没有仔细研究过python的并发方案,实习的时候终于有了这样的需求。

Gevent是Python中coroutine协程的一种实现,基于Greenlet。之前我只是听说过其在性能优化上简单而有效,正好最近有并发需要,所以就稍微用了一下。

确实是非常简单,其中的monkey库可以直接patch系统的多进程、多线程还有socket的实现,具体的调用方法就是monkey.patch_xxx(),xxx可以是socket,ssl,os,subprocess,thread等。还可以直接调用monkey.patch_all()执行所有的patch。

gevent的好处在于可以自动切换协程,一般来说I/O操作比较耗时,那么当一个协程在等待I/O时,它会自动切换到其他协程工作,这样就能够充分利用CPU了。

阅读全文

AsisCTF 2015 - Simple Algorithm

Score: 100

根据下面的加密算法和给出的密文解出flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/python

flag = '[censored]'
hflag = flag.encode('hex')
iflag = int(hflag[2:], 16)

def FAN(n, m):
i = 0
z = []
s = 0
while n > 0:
if n % 2 != 0:
z.append(2 - (n % 4))
else:
z.append(0)
n = (n - z[i])/2
i = i + 1
z = z[::-1]
l = len(z)
for i in range(0, l):
s += z[i] * m ** (l - 1 - i)
return s

i = 0
r = ''
while i < len(str(iflag)):
d = str(iflag)[i:i+2]
nf = FAN(int(d), 3)
r += str(nf)
i += 2

print r
阅读全文

Numpy中最常用的是ndarray数组,而因为其是多维的有时候需要在不同维度上进行切片。

其实它的切片方式与Matlab类似,熟练以后就很好掌握了。

基本原理是这样,首先切片需要使用序列生成即冒号运算符:

一个单冒号为选取整个序列,也可以指定范围,如1:5表示1~4(包括)这4个元素。同时可以指定步长如1:6:2表示选取1,3,5这3个元素,这个与Python的列表切片是一致的。

然后,使用逗号,来区分轴(axis),轴可以简单地理解为在某个维度上的投影。例如axis=0指的就是行,axis=1指的就是列。那么第一个选取就是行,第二个选取的就是列,中间用逗号隔开,例如下面的一条语句。

1
arr[:,2]
阅读全文
  • 第 1 页 共 1 页

BrieflyX

Previous chief leader of 9# Studio


Infomation Security Engineer


Beijing, China