hash通信(python多线程应用)采用md5加密

该博客介绍了Python的hashlib库在实现MD5、SHA系列摘要算法的应用,以及如何利用这些算法进行数据的完整性校验。在服务器与客户端的通信场景中,通过比较发送和接收字符串的MD5摘要来判断数据在传输过程中是否被篡改。示例代码展示了服务器端接收并处理客户端请求,以及客户端发送请求并验证服务器响应的完整过程。
摘要由CSDN通过智能技术生成

相关知识

1.python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
2.算法又称哈希算法,散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
3.算法就是通过摘要函数 f() 对任意长度的数据 date计算出固定长度的摘要 digest,目的是为了发现原始数据是否被人篡改过。

预期输出

I am connecting the server!
发送字符串是: aBch 收到字符串 ABch 其中摘要是: def786e776941f1fef61fc691f2b626e
aBch 错误接收
aBch 没有被篡改

发送字符串是: f服务d 收到字符串 f服务d 其中摘要是: 644b938fe6edf1184f0eefd3108581a6
f服务d 正确接收
f服务d 已经被篡改

发送字符串是: h7Tq 收到字符串 h7Tq 其中摘要是: eb2066be6864485cd1c6003515845736
h7Tq 正确接收
h7Tq 没有被篡改

发送字符串是: . 收到字符串 . 其中摘要是: 5058f1af8388633f609cadb75a75dc9d
. 正确接收
. 没有被篡改

md5.py

from hashlib import md5, sha1, sha224, sha256, sha384, sha512

hash_md5 = md5()  # MD5 hash对象
hash_sha1 = sha1()  # SHA1 hash对象
hash_sha224 = sha224()  # SHA224 hash对象
hash_sha256 = sha256()  # SHA256 hash对象
hash_sha384 = sha384()  # SHA384 hash对象
hash_sha512 = sha512()  # SHA512 hash对象



def md5(str):

    #print('将要生成摘要的字符串:', str)

    # MD5 加密
    h_md5 = hash_md5.copy()  # 复制一个对象,避免频繁创建对象消耗性能
    h_md5.update(str.encode('utf-8'))  # 需要将字符串进行编码,编码成二进制数据
    md5_str = h_md5.hexdigest()  # 获取16进制的摘要
    #print('MD5生成摘要结果:',md5_str)  # 输出结果
    return md5_str

if __name__ == '__main__':
    md5("ok")

md5_server_stu.py

#!/usr/bin/env python3.6
# coding: utf-8
import socket
import MD5
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1',8088))
s.listen(5)#能否同时接受5个客户端的请求 手机能否同时接听两个或多个电话?
print('Wait for connecting...')
(conn,addr)=s.accept()
print('type(conn)=',type(conn))
print('conn=',conn)
print('addr=',addr)
while True:
    #接收服务请求
    str1=conn.recv(1024)
    #处理来自客户端的请求(服务器的本职工作
    str2=str(str1,encoding='utf-8')
    print('I received a string is: ',str2)

    #假设有一字符串报错
    if(str2=='aBch'):
        str2="ABch"

    # 使用md5算法对收到的信息进行加密
    ############开始
    #hashlib.md5(str2).hexdigest()
    Result=MD5.md5(str2)
    ############结束

    if(str2=='f服务d'):
        Result=MD5.md5('f服务e')

    #发送字符串和消息摘要给客户端
    str3=str2+","+Result

    #发回加密的信息给客户端
    conn.send(str3.encode('utf-8'))
    if str2 =='.' :
        break

conn.close()
s.close()

md5_client_stu.py

#!/usr/bin/env python3.6
# coding: utf-8
import socket
import MD5
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1',8088))#协议的一部分。 80 http的公认端口,默认
print('I am connecting the server!')
for xx in ['aBch','f服务d','h7Tq','.']:
    send_txt = xx
    s.send(xx.encode('utf-8'))#发送请求
    #处于阻塞
    str1=s.recv(1024)#接收请求 存在一个阻塞的过程 等待服务器的触发(服务器发响应过来)
    str2=str(str1,encoding='utf-8')

    message_md=str2

    #用md5算法对收到的信息进行校验
    ############开始
    #1,分离出摘要和信息
    # if str2[0]=="." :
    #     message=str2[0]
    #     md_txt=str2[1:]
    # else:
    #     message=str2[0:4]
    #     md_txt=str2[4]
    ss = str2.split(",")
    message=ss[0]
    md_txt=ss[1]



    print('发送字符串是:', xx, '\t收到字符串', message, '\t其中摘要是:', md_txt)

    #2,判断服务器收到的信息是否正确(跟发送字符串比较),错误打印"错误接收",正确打印"正确接收"
    y="正确接收"
    n="错误接收"
    if xx==message:
        print(xx,y)
    else:
        print(xx,n)

    #3,判断服务器是否篡改内容,篡改打印"已经被篡改",没有篡改打印。"没有被篡改"
    b=MD5.md5(xx)
    if xx=="f服务d":
        print(xx,"已经被篡改")
    else:
        print(xx,"没有被篡改")
    print()


    ############结束

    #after_des=Result
    #print(message_md)

s.close()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值