一:re模块
正则就是用一些具有特殊含义的符号组合到一起(称之为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在python中)它内嵌在python中,并通过re模块实现。正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行。
1.常用的匹配模式
http://blog.csdn.net/yufenghyc/article/details/51078107
import re #w是匹配字符串中的一个字母/数字/下划线 # print(re.findall('zw','zdsb_hhhh lzrdsbh 5612 dfsd525656')) # # print(re.findall('zW','zdsb_hhhh lzrdsbh 5612 dfsd525656')) # ^是从头开始匹配,开头找不到就不再找了,开头找到的话就找出一个 # $:是从末尾查找,也就是从最后一位查找,最后一位匹配不上就不再查找了 # 例如: # print(re.findall('alex$','alex is alex is alex1')) # alex$ # .:代表一个字符,该字符可以是除换行符( )之外的任意字符,但是在字符串最后加上(re.DOTALL)就可以匹配 # []:代表匹配一个字符,这一个字符是来自自定义范围,'-'减号表示范围,如果要表示加减乘除的话就要将减号放在开头或者是结尾 # 也可以在里面加上^表示取反的意思 # print(re.findall('a[a-z]c','akc jka-cchnj123654')) # print(re.findall('a[w]c','akc jka-cchnj123654')) # 重复匹配(要和其他的字符搭配使用,例如:[ab+]) # ?:代表左边那一个字符出现0次到一次 # *:代表左边那一个字符出现0次到无穷次 # +:代表左边那一个字符出现1次到无穷次 # {n,m}:代表左边那一个字符出现n次到m次 # # print(re.findall('sb?','sb sbb bb sbbb s66bdjij')) # print(re.findall('sb*','sb sbb bb sbbb s66bdjij')) # print(re.findall('sb+','sb sbb bb sbbb s66bdjij')) # print(re.findall('sb{1,3}','sb sbb bb sbbb s66bdjij')) # .*:匹配任意0个到无穷个字符,贪婪匹配 # .*?:匹配任意0个到无穷个字符,非贪婪匹配,例如:a.*?c 找到离自己最近的那个c # |:或者 # ():分组,只打印括号里面的内容 # re.I:加在最后表示不区分大小写 # re.M:表示以换行符分割,进行多行匹配 # msg=''' # zdsbjnjkncmk Grace # 554hhhhhhh Grace # grace hh # ''' # print(re.findall('Grace$',msg,re.M)) # print(re.findall('Grace',msg,re.I)) # # 取出里面所有的数字 # msg='1-2*(60+(-40.35/5)-(4*3))' # print(re.findall('D?(-?d+.?d*)',msg)) pattern=re.compile('alex') #正则表达式 print(pattern.findall('alex is pig ')) print(pattern.match('alex is pig alex')) #只在开头找 print(pattern.search('alex is pig alex ')) #找第一个,找到就结束
# 1.取出里面所有的数字 msg='1-2*(60+(-40.35/5)-(4*3))' print(re.findall('D?(-?d+.?d*)',msg))
二:hashlib模块
1.什么是hash?
hash是一种算法,该算法接收一系列的数据,经过运算会得到一个hash值。
2.hash值具备三大特性:
1:只要传入的内容一样,那么得到的hash值一定是一样的。(要用明文传输密码文件完整性校验)
2.只要采用hash算法固定,无论传入的内容多大,hash值的长度是固定的
3.hash值不可逆,即不能通过hash值逆推出内容(把密码做成hash值,不应该在网络传输明文密码)
hash算法就像是一座工厂,工厂接收你送来的原材料(可以用m.updata()为工厂运送原材料),经过加工返回的产品就是hash值。
先导入md5加密所需模块: import hashlib 创建md5对象 m=hashlib.md5() 生成加密串,其中password是要加密的字符串 m.update('password') 获取加密串 pwd=m.hexdigest() 输出 print(pwd) #加密程度增加 pwd=input('password>>> ').strip() m=hashlib.md5() #采用的hash编码方式 m.update('天王盖地虎'.encode('utf-8')) #加密 m.update(pwd.encode('utf-8')) m.update('一行白鹭上青天'.encode('utf-8')) #加密 print(m.hexdigest())
加密算法虽然厉害,但是仍然存在缺陷,没有绝对的安全,只有相对的安全,加密也是相对的,没有破解不了的代码,需要时间物力人力而已,因此要加强算法的安全性。尽管说hash值反解不了内容,但是实际上可以通过撞库莱破解,也就是蒙,几率很小而已。所以,有必要对加密算法中添加自定义key再来做加密。上列代码中天王盖地虎和一行白鹭上青天就是自定义的加密的key。