Python学习之路_day15

一:re模块

  正则就是用一些具有特殊含义的符号组合到一起(称之为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在python中)它内嵌在python中,并通过re模块实现。正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行。

  1.常用的匹配模式

http://blog.csdn.net/yufenghyc/article/details/51078107

import re

#\w是匹配字符串中的一个字母/数字/下划线
# print(re.findall('z\w','zdsb_hhhh lzrdsbh 5612 dfsd525656'))
#
# print(re.findall('z\W','zdsb_hhhh lzrdsbh 5612 dfsd525656'))

# ^是从头开始匹配,开头找不到就不再找了,开头找到的话就找出一个
# $:是从末尾查找,也就是从最后一位查找,最后一位匹配不上就不再查找了
# 例如:
# print(re.findall('alex$','alex is alex is alex1'))
#                                          alex$
# .:代表一个字符,该字符可以是除换行符(\n)之外的任意字符,但是在字符串最后加上(re.DOTALL)就可以匹配\n

# []:代表匹配一个字符,这一个字符是来自自定义范围,'-'减号表示范围,如果要表示加减乘除的话就要将减号放在开头或者是结尾
#     也可以在里面加上^表示取反的意思
# 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 '))   #找第一个,找到就结束
View Code
# 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())
View Code

加密算法虽然厉害,但是仍然存在缺陷,没有绝对的安全,只有相对的安全,加密也是相对的,没有破解不了的代码,需要时间物力人力而已,因此要加强算法的安全性。尽管说hash值反解不了内容,但是实际上可以通过撞库莱破解,也就是蒙,几率很小而已。所以,有必要对加密算法中添加自定义key再来做加密。上列代码中天王盖地虎和一行白鹭上青天就是自定义的加密的key。

猜你喜欢

转载自www.cnblogs.com/liuxiaolu/p/10077249.html