日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

初级版python登录验证,上传下载文件加MD5文件校验

發(fā)布時(shí)間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初级版python登录验证,上传下载文件加MD5文件校验 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

服務(wù)器端程序

import socket
import json
import struct
import hashlib
import osdef md5_code(usr, pwd):ret = hashlib.md5(usr.encode())ret.update(pwd.encode())return ret.hexdigest()def login():recv_msg = conn.recv(1024).decode()msg_dic = json.loads(recv_msg)with open('user_msg', 'r', encoding='utf-8') as f1, \open('user_msg', 'a', encoding='utf-8') as f2:for con in f1:con_li = con.strip().split()if con_li[0] == msg_dic['username'] and con_li[1] == md5_code(msg_dic['username'], msg_dic['password']):flag = json.dumps({'flag': 1})conn.send(flag.encode())return {'flag': 1}else:flag = json.dumps({'flag': 0})conn.send(flag.encode())content = msg_dic['username'] + '\t' + md5_code(msg_dic['username'], msg_dic['password']) + '\n'f2.write(content)return {'flag': 0}def upload():dic_len = conn.recv(4)dic_size = struct.unpack('i', dic_len)[0]file_info = json.loads(conn.recv(dic_size))f1 = open(file_info['filename'], 'wb')md5_data = hashlib.md5()while file_info['filesize'] > 0:# 在最后接收文件不足2048時(shí)接收精準(zhǔn)字節(jié),避免與后面發(fā)送的數(shù)據(jù)發(fā)生粘包if 0 < file_info['filesize'] < 1204:content = conn.recv(file_info['filesize'])else:content = conn.recv(2048)md5_data.update(content)f1.write(content)# 每次減去實(shí)際接收的文件長(zhǎng)度可以避免tcp協(xié)議拆包時(shí)實(shí)際接收到的數(shù)據(jù)沒(méi)有2048而導(dǎo)致接收數(shù)據(jù)不完整file_info['filesize'] -= len(content)f1.close()# 獲得校驗(yàn)后的md5值md5sum = md5_data.hexdigest()# 接收客戶端校驗(yàn)后的md5值recv_md5 = conn.recv(32).decode()if md5sum == recv_md5:print('校驗(yàn)成功')return {'flag': 1}else:print('校驗(yàn)失敗')return {'flag': 0}def download():dic_len = conn.recv(4)dic_size = struct.unpack('i', dic_len)[0]file_info = json.loads(conn.recv(dic_size))file_size = os.path.getsize(file_info['filename'])dir_list = os.listdir('.')dfile_info = {'filesize': file_size, 'operate': 'download', 'dir_list': dir_list}file_dic = json.dumps(dfile_info).encode()file_len = struct.pack('i', len(file_dic))# 發(fā)送文件信息
    conn.send(file_len)conn.send(file_dic)f1 = open(file_info['filename'], 'rb')md5_data = hashlib.md5()while file_size:content = f1.read(2048)md5_data.update(content)file_size -= len(content)conn.send(content)f1.close()md5sum = md5_data.hexdigest()print(md5sum)conn.send(md5sum.encode())return {'flag': 1}server = socket.socket()
server.bind(('127.0.0.1', 8001))
server.listen(5)
conn, addr = server.accept()login_ret = login()
if login_ret['flag']:while login_ret['flag']:recv_cmd = conn.recv(1024).decode()cmd_dic = json.loads(recv_cmd)if cmd_dic['cmd'] == '1':print('上傳文件中')upload()elif cmd_dic['cmd'] == '2':print('下載文件中')download()elif cmd_dic['cmd'] == '3':break
else:print('請(qǐng)重新登錄')conn.close()
server.close()

?

客戶端程序

import os
import json
import socket
import struct
import hashlib
# import timedef login():usr = input('請(qǐng)輸入用戶名:')pwd = input('請(qǐng)輸入密碼:')usr_info_dic = {'username': usr, 'password': pwd, 'operate': 'login'}usr_info = json.dumps(usr_info_dic).encode()client.send(usr_info)ret = client.recv(1024).decode()flag_dic = json.loads(ret)if flag_dic['flag']:print('登錄成功')return {'flag': 1}else:print('登錄失敗')return {'flag': 0}def upload():# F:\test.mp4file_path = input('請(qǐng)輸入文件路徑:')file_size = os.path.getsize(file_path)file_name = os.path.basename(file_path)file_info = {'filesize': file_size, 'filename': file_name, 'operate': 'upload'}file_dic = json.dumps(file_info).encode()file_len = struct.pack('i', len(file_dic))# 發(fā)送文件信息
    client.send(file_len)client.send(file_dic)total_size = file_size# 打開(kāi)文件準(zhǔn)備上傳文件md5_data = hashlib.md5()f1 = open(file_path, 'rb')while file_size:content = f1.read(2048*10)md5_data.update(content)file_size -= len(content)client.send(content)print('\r已上傳%s%%' % int((1 - file_size / total_size) * 100), end='')print('上傳成功!')f1.close()md5sum = md5_data.hexdigest()print(md5sum)# time.sleep(0.1)
    client.send(md5sum.encode())return {'flag': 1}def download():# F:\test.mp4file_name = input('請(qǐng)輸入文件名:')file_info = {'filename': file_name, 'operate': 'download'}file_dic = json.dumps(file_info).encode()file_len = struct.pack('i', len(file_dic))# # 發(fā)送文件信息
    client.send(file_len)client.send(file_dic)dic_len = client.recv(4)dic_size = struct.unpack('i', dic_len)[0]dfile_info = json.loads(client.recv(dic_size))md5_data = hashlib.md5()for dir_index, dir_name in enumerate(dfile_info['dir_list']):print(dir_index, dir_name)total_size = dfile_info['filesize']f1 = open('down' + file_name, 'wb')while dfile_info['filesize'] > 0:# 在最后接收文件不足2048時(shí)接收精準(zhǔn)字節(jié),避免與后面發(fā)送的數(shù)據(jù)發(fā)生粘包if 0 < dfile_info['filesize'] < 1204:content = client.recv(dfile_info['filesize'])else:content = client.recv(2048)md5_data.update(content)f1.write(content)dfile_info['filesize'] -= len(content)print('\r已下載%s%%' % int((1-dfile_info['filesize'] / total_size) * 100), end='')f1.close()md5sum = md5_data.hexdigest()# print('\n', md5sum)
recv_md5 = client.recv(32).decode()# print(recv_md5)if md5sum == recv_md5:print('校驗(yàn)成功')return {'flag': 1}else:print('校驗(yàn)失敗')return {'flag': 0}# print('下載成功!')# return {'flag': 1}def choose_cmd():print('''1.上傳文件2.下載文件3.退出上傳下載文件''')cmd = input('請(qǐng)輸入序號(hào)選擇相應(yīng)操作')dic = {'cmd': cmd}cmd_dic = json.dumps(dic).encode()client.send(cmd_dic)return dicclient = socket.socket()
# client.connect(('192.168.13.13', 8001))
client.connect(('127.0.0.1', 8001))login_ret = login()
if login_ret['flag']:while login_ret['flag']:cmd_ret = choose_cmd()if cmd_ret['cmd'] == '1':upload()elif cmd_ret['cmd'] == '2':download()elif cmd_ret['cmd'] == '3':breakelse:print('輸入的序號(hào)有誤')
else:print('請(qǐng)重新登錄')client.close()

?

轉(zhuǎn)載于:https://www.cnblogs.com/chen55555/p/10318267.html

總結(jié)

以上是生活随笔為你收集整理的初级版python登录验证,上传下载文件加MD5文件校验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。