zoukankan      html  css  js  c++  java
  • hashlib-sha摘要算法模块

    摘要:hashlib:

    摘要算法的模块

    用处:
      1、查看某两个文件是否完全一致
        "abcdefggg"
        "abcdefhhg"
      2、加密认证
        把密码加密后写入文件
        (发生任何变化 都不行)

    模块:
      1、md5
      2、sha sha256 sha512 等等

    简单示例:

    import hashlib      #导入模块
    
    obj = hashlib.md5('字符串')             #创建md5类的对象         (加盐:静态和动态)   
    obj.update(b"对比内容,或 加密内容")      #传入数据   bytes 类型   bytes()
    a = obj.hexdigest()                 #对比的结果
    print(a)                                #打印,写入文件 等等操作

    校验两个字符串是否一致:

    import hashlib
    md5_obj1 = hashlib.md5()
    md5_obj1.update(b'How are you?')        #b"" 转换成bytes 类型  
    a = md5_obj1.hexdigest()            #hexdigest  找摘要算法要结果
    print(a)
    #04e35eb3e4fcb8b395191053c359ca0e
    md5_obj2 = hashlib.md5()
    md5_obj2.update(b'How are')             #两个字符串不一样
    b = md5_obj2.hexdigest()
    print(b)                                            #打印摘要算法 的结果
    # 699f3620f6b19226ec27865572f7b704
    print(a == b)           #md5 也不一样
    #False                  #文章校对(是否完全一致),密码校验 等等

    一篇文章的校验:

      md5_obj.update()
      支持多行,校验文件的时候,分别读取2个文件,一行一行读,每一行update一下
      对比最终的hexdigest()

    import hashlib
    md5_obj1 = hashlib.md5()
    md5_obj2 = hashlib.md5()
    with open('name','r',encoding='utf-8') as f,
        open('文件','r',encoding='utf-8') as f1:
        for line in f:
            md5_obj1.update(bytes(line,encoding='utf-8'))
        for line1 in f1:
            md5_obj2.update(bytes(line1,encoding='utf-8'))      #update() 累加
    a = md5_obj1.hexdigest()
    b = md5_obj2.hexdigest()
    print(a == b)                       #   对比最终的 hexdigest()
    #True 或 False

    import hashlib
    md5_obj1 = hashlib.md5()
    md5_obj2 = hashlib.md5()
    with open('name','rb') as f,                   #直接用 "rb" 模式打开 , 不用 encoding='utf-8' 编码
        open('文件','rb') as f1:
        for line in f:
            md5_obj1.update(bytes(line))
        for line1 in f1:
            md5_obj2.update(bytes(line1))
    a = md5_obj1.hexdigest()
    b = md5_obj2.hexdigest()
    print(a == b)

    密码加密:

    import hashlib
    md5_obj = hashlib.md5()
    md5_obj.update(b'123456789')    # 密码
    a = md5_obj.hexdigest()
    print(type(a))
    with open('name','w') as f:
        # f.write(bytes(a,encoding='utf-8'))            #'wb' 模式打开 , 要转成 bytes类型
        f.write(a)

    如果只是简单的加密,可以暴力破解:撞库

      http://www.cmd5.com/ 一个在线md5 破解网站

      撞库: 暴力破解密码

    加盐: 为客户加字符串(有的客户密码太简单,主动弄复杂)

    分为静态加盐和动态加盐

    静态加盐:

    import hashlib
    md5_obj = hashlib.md5('fdfdf@#$'.encode('utf-8'))           # 给下面的密码加上一些字符串
    md5_obj.update(b'123456789')    # 密码
    a = md5_obj.hexdigest()
    print(a)
    e8d298f03f7b6b0ce169ba30729a19e5

    动态加盐:

    md5_obj = hashlib.md5('用户名 + @#@df +密码'.encode('utf-8'))  

    sha:

    也是个算法

    sha 和 hsshlib 一样

    sha:
      1.sha
      2.sha256
      3.sha512
      4.....

    256,512,字节数越多, 运行速度越慢,,安全性更高

      小结:

    1、摘要的过程不可逆
    2、能做的事:
      文件的一致性检测
      用户的加密认证:
        单纯的md5不够安全
        静态加盐: 简单的盐可能被破解,且破解之后所有的盐都失效了
        动态加盐:动态的

  • 相关阅读:
    docker容器之启动容器
    docker镜像之registry
    docker镜像之镜像命名
    习题3
    习题二(1)
    课堂作业4
    课堂作业(电费)
    课堂作业2
    实验4
    实验3
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/9295718.html
Copyright © 2011-2022 走看看