美文网首页编程之美-Pyhon
python --- hashlib加密

python --- hashlib加密

作者: 幼姿沫 | 来源:发表于2020-04-23 21:23 被阅读0次

    一 * hashlib模块

    1.哈希算法哈希函数 又称 散列函数 把数据转化为一串数字


    对同一个数据在同一次运行同一个数据哈希结果相同

    对每一个相同的值进行哈希结果是相同的

    可哈希                不可变类型     数字字符串

    不可哈希             可变类型      字典元组列表

    字典的key键是不可变且唯一的*可哈希*,value值是可变的*不可哈希*

    set集合是去重的也是散列函数

    2.hashlib模块是加密的


         1.加密也即摘要算法  用法import hashlib

             md5   业界最常用的算法 32位16进制

                 sha1     算法                    40位16进制

    文件一致性       

    作用

    验证加密  

    基本的摘要会撞库

    加盐是恶意注册

    动态加盐 -------安全的 username切片进行修饰

    2.hmac 对hash进行封装

             hmac(b"salt",b"hello",md5)

              obj=hashlib.sha1()

              obj.digest()    #字节串

       3.获得随机数

    import os

    print(os.urandom(20))

    3.登陆案例

    用户密码是hello

    a.txt

    4.MD5加盐 验证文件一致性


    二 * hashlib中的sha1算法

    2.验证客户端是否合法


    server.py

    client.py

    3.客户端验证合法之后进行通话


    server.py

    import socket

    import hashlib

    sk=socket.socket()

    sk.bind(("127.0.0.1",9090))

    sk.listen(5)

    conn,addr=sk.accept()

    salt="hello"

    str="来到医院"

    ret_s=conn.send(str.encode("utf-8"))

    ret_c=conn.recv(1024).decode("utf-8")

    print(ret_c)

    #对接收的内容进行加密

    obj=hashlib.md5(salt.encode("utf-8"))

    obj.update(str.encode("utf-8"))

    str_obj=obj.hexdigest()

    #将加密后的内容和加密之前的内容进行对比

    if ret_c == str_obj:

    print("合法的客户端允许链接")

    while True:

    s=input("发送消息给client>>>").encode("utf-8")

    ret=conn.send(s)

    print(ret)

    msg=conn.recv(1024).decode("utf-8")

    print(msg)

    else:

    print("不合法的客户端非法不连接")

    conn.close()

    sk.close()

    client.py

    三  *  验证合法之后进行封装             

    1.server.py

    #创建连接

    import hmac

    def  mysocket():

        sk = socket.socket()

        sk.bind(('127.0.0.1', 8080))

        sk.listen(3)

        conn, addr = sk.accept()

        return conn,sk

    #验证

    def auth(conn,sk):

        salt = b'hello'

        str = os.urandom(20)

        conn.send(str)  # 发送字节串

        md5_s = conn.recv(1024)  # 接收客户端发来的MD5_s

       #以下是hashlib模块

        # obj = hashlib.md5(salt)

        # obj.update(str)

        # r_str = obj.hexdigest()

    #以下是hmac模块

        obj = hmac.new(salt,str)

        r_str = obj.digest()

        if md5_s == r_str:

            print('合法的客户端,允许连接!')

            com()

        else:

            print("非法!!!")

        conn.close()

        sk.close()

    #通信函数

    def com():

        while True:

            s = input("发送消息给client 》》》").encode('utf-8')

            conn.send(s)

            msg = conn.recv(1024).decode('utf-8')

            print(msg)

    if __name__ == '__main__':

        conn,sk = mysocket()

        auth(conn,sk)

    cient.py

    import hmac

    def mysocket():

        sk = socket.socket()

        sk.connect(('127.0.0.1',8080))

        return sk

    def auth(sk):

        salt = b'hello'

        bytes = sk.recv(1024) # 接收字符串

    #以下是hashlib模块

        # obj = hashlib.md5(salt)

        # obj.update(s)

        # r_str = obj.hexdigest()

    #以下是hmac模块

        obj = hmac.new(salt, bytes)

        r_str = obj.digest()

        sk.send(r_str)

        com()

        sk.close()

    def com():

        while True:

            msg = sk.recv(1024).decode('utf-8')

            print(msg)

            s = input("发送消息给server 》》》").encode('utf-8')

            sk.send(s)

    if __name__ == '__main__':

        sk = mysocket()

        auth(sk)

    相关文章

      网友评论

        本文标题:python --- hashlib加密

        本文链接:https://www.haomeiwen.com/subject/ewdwihtx.html