当前位置: 首页 > news >正文

python如何解决MD5对文件加密出现粘包的情况

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

import socket import os import hashlib server=socket.socket() server.bind(('127.0.0.1',6969)) server.listen() while True: # 保证能与多个通话 conn,addr = server.accept() print('与',addr,'通话') while True: # 保证与某一个一直通话 data=conn.recv(1024) if not data: print('客户端已经断开') break cmd, filename = data.decode().split() print(filename) if os.path.isfile(filename): f = open(filename, 'rb') m = hashlib.md5() file_size = os.stat(filename).st_size print(file_size) conn.send(str(file_size).encode()) # send the file size conn.recv(1024) # wait the ack from client for line in f: # read the file m.update(line) # apply md5 arithmetic conn.send(line) # don't need to encode because fetch is rb print('md5', m.hexdigest()) # print the finally md5 f.close() conn.send(m.hexdigest().encode()) # send md5 to client

    print('send done')

server.close()

import socket import hashlib client = socket.socket() client.connect(('127.0.0.1', 6969)) while True: cmd = input('>>:').strip() if len(cmd) == 0: continue if cmd.startswith('get'): client.send(cmd.encode('utf-8')) server_response = client.recv(1024) print('server_response:', server_response) client.send(b'is ready to receive file') file_total_size = int(server_response.decode()) print('file_total_size',file_total_size) received_size = 0 filename = cmd.split()[1] f = open(filename + '.new', 'wb') m = hashlib.md5() while received_size < file_total_size: if file_total_size - received_size > 1024: # solve the problem can't not receive md5 from server size = 1024 else: size = file_total_size - received_size # received data total=server send the data,except md5 data = client.recv(size) received_size += len(data) f.write(data) m.update(data) else: new_file_md5 = m.hexdigest() print('received has done', received_size, file_total_size) f.close() server_md5 = client.recv(1024) print('server md5 is:', server_md5) print('client md5 is:', new_file_md5) client.close()

转载于:https://my.oschina.net/u/2511906/blog/1840507

相关文章:

  • js获取url锚链,操作class和id的显示和隐藏
  • 【活动预告】Hi,游戏开发者,这有一份您的邀请函
  • Ocelot(v7.0.6)使用小记
  • 如何让机器向“时尚达人”学习?阿里做了个“实用”的图像数据集
  • 机器学习二分类模型评价指标:准确率\召回率\特异度等
  • Javascript装饰器的妙用
  • 前端框架三巨头:React仍是老大,Vue 增长率最高
  • 用laravel dingo/api创建产品api
  • Struts2配置后ClassNotFoundException
  • 一套比较完整的前端技术选型,需要规整哪些东西,你知道不?
  • 咱们来聊聊并发工具类Semaphore
  • 漂亮刷新控件-iOS
  • 利用ForgeryPy生成虚拟数据
  • 我的第一次分享会感想
  • 比特币交易所EXX受到黑客攻击,交易量达到3万亿美元
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【笔记】你不知道的JS读书笔记——Promise
  • codis proxy处理流程
  • DataBase in Android
  • FastReport在线报表设计器工作原理
  • JS笔记四:作用域、变量(函数)提升
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Redux 中间件分析
  • SegmentFault 2015 Top Rank
  • storm drpc实例
  • ucore操作系统实验笔记 - 重新理解中断
  • vue.js框架原理浅析
  • vue-router的history模式发布配置
  • yii2中session跨域名的问题
  • 关于List、List?、ListObject的区别
  • 技术胖1-4季视频复习— (看视频笔记)
  • 马上搞懂 GeoJSON
  • 排序算法之--选择排序
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 我建了一个叫Hello World的项目
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 大数据全解:定义、价值及挑战
  • 选择阿里云数据库HBase版十大理由
  • #if #elif #endif
  • (java)关于Thread的挂起和恢复
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (实战篇)如何缓存数据
  • (一)基于IDEA的JAVA基础10
  • (转)Scala的“=”符号简介
  • (转)使用VMware vSphere标准交换机设置网络连接
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net core Swagger 过滤部分Api
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 反射 Reflect
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET6 开发一个检查某些状态持续多长时间的类