• re模块、hashlib模块


    一: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 '))   #找第一个,找到就结束
    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。

  • 相关阅读:
    python多进程(一)
    python操作memcached
    python操作redis
    SQLAlchemy总结
    SQLAlchemy-ORM
    python操作mysql二
    python操作mysql
    python正则二
    python正则
    python内置模块(三)
  • 原文地址:https://www.cnblogs.com/liuxiaolu/p/10077249.html
Copyright © 2020-2023  润新知