python --- hashlib加密

一 * 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代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,169评论 0 6
  • 常用模块 认识模块 什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文...
    go以恒阅读 2,032评论 0 6
  • Socket:(基于TCP、IP协议的网络通信)套接字 基于Socket实现聊天机器人# 客户端import so...
    xinmin阅读 819评论 0 0
  • 本文主要讲述官方提供的客户端以及自己写的增删查改工具: ros_tool.py功能总汇,展示界面用了python的...
    追寻823阅读 3,286评论 0 1
  • 可以监听多个文件描述符(socket对象)(文件句柄),一旦文件句柄出现变化,即可感知# 服务端import so...
    xinmin阅读 395评论 0 0