Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 08.12.2016
Сообщений: 2

Как шифровать файлы при передаче на сервер и дешефровать при передаче с сервера на клиент

08.12.2016, 07:18. Показов 2198. Ответов 0

Студворк — интернет-сервис помощи студентам
Есть программа клиент/сервер, файлы со стороны клиента передаются на сервер, если были внесены изменения. Как правильно зашифровать файлы, чтобы после их передачи серверу, они на нем лежали зашифрованными (при этом они остаются незашифрованными на стороне клиента, и сервер не знает ключ для дешифрования)? т.е. если кто-то взломает сервер, они не могут воспользоваться этими файлами. Не могу найти приемеры для питона python, так что если есть какие-то примеры(особенно, используя OpenPGP) и как вообще это делать, было бы здорово.
Конкретно вопрос в том, что для посылки файла от клиента серверу и чтобы на сервер они загружались зашифрованными и выгружались с сервера на клиент-дешефрованными, если воспользоваться AES, то как? какой модификацией? И другие способы-как ими пользоваться?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# server.py
 
import socket                                               # Import socket module
import ssl
import sys                                                  # Import system-specific parameters and functions
import hashlib
import os.path                                              # Import module to manipulate paths
import os, time, _thread as thread
from socket import *
 
ssl_certfile = "/cs/home/server.crt"
ssl_keyfile = "/cs/home/server.key"
 
def now():
    return time.asctime()
 
def process_file(file_name):
    
    user_names = []
    passwords = []
    
    try:
        file_conn = open(file_name)
        data = file_conn.readlines()
 
        for i in range(len(data)): 
            if i%2 == 0:
                user_names.append(data[i][:-1])
            else:
                passwords.append(data[i][:-1])
            
        file_conn.close()
    except:
        sys.exit('There was a problem reading the file!')
        
    return user_names, passwords
 
 
def myrec(the_socket):
    total_data=[]
    while True:
        data = the_socket.recv(8192)
        if not data: break
        total_data.append(data)
    return ''.join(total_data)
 
def main(connstream):
 
    print 'Client connected to login...'
  
    user_names, passwords = process_file("pass.txt")
 
    user = connstream.recv(1024)                        # Get up to 1024 bytes at a time
    print user      
 
    if user not in user_names:
        connstream.send ("Unkown User Name, terminating... ")
        sys.exit('Unkown User Name, terminating... \n')
        
        
    else:
        connstream.send ("Please enter password: ")
        password = connstream.recv(1024)                        # Get up to 1024 bytes at a time
        print password
    user_input = hashlib.sha224(password).hexdigest()
        dir_name = ((r'/cs/home/server/%s') % (user))
                
        os.chdir(dir_name)
        
        if user_input != passwords[user_names.index(user)]:
        
            
        print 'Incorrect Password!\n'
                connstream.send ("Incorrect password. ")
 
 
        sys.exit('Incorrect Password, terminating... \n')
        else:
 
            print 'User is logged in!\n'
                connstream.send ('User is logged in!\n')
 
 
                reqCommand = connstream.recv(1024)                            # Get up to 1024 bytes at a time
                print 'Client> %s' %(reqCommand)
                if (reqCommand == 'q'):
                    print "Current client quited!"
                    sys.exit("Client quited.")
 
                else:
                    string = reqCommand.split(' ', 1)                   # In case of 'u'-upload and 'd'-download method
                    #reqFile = string[1] 
 
                    if (string[0] == 'u'):
                        reqFile = string[1]
                        data = connstream.recv(1024)                        # Get up to 1024 bytes at a time
 
                        if data == "EXISTS":                          # If file exists 
                            print "FILE on the client side EXISTS!"
 
                            with open(reqFile, 'wb') as file_to_write:   # Create local file
                                while True:
                                    data = myrec(connstream)            # Get up to 1024 bytes at a time
                                    if not data:                      # until file totally sent.
                                       break
                                    file_to_write.write(data)         # Store data in local file
                                    file_to_write.close()
                                    print 'Received successfully.'
                                    break
                        else:
                            print "NO SUCH FILE on the client side!"
            
 
                    elif (string[0] == 'd'):
                        reqFile = string[1]
                        if os.path.isfile(reqFile):                     # If "filename" is an "input filename" 
                            print "FILE EXISTS on the server!"
                            connstream.send("EXISTS")                         # send respond to client
                            with open(reqFile, 'rb') as file_to_send:   # Create local file
                               for data in file_to_send:
                                  connstream.sendall(data)                  # Connect and send the data
                                  print 'Sent successfully.'                 
                        else:
                            print "NO SUCH FILE on the server!"
            
                
    connstream.close()                                            # Close the connection
 
 
HOST = 'localhost'                                          # Get local machine name              
PORT = 3004                                                 # Reserve a port for your service.
 
socket = socket(AF_INET, SOCK_STREAM)  # Create a socket object
socket.bind((HOST, PORT))                                   # Bind to the port
socket.listen(1)                                            # Now wait for client connection.
 
while (1):
    conn, addr = socket.accept()                            # Establish connection with client.
    print 'Client connected ..'
    print('Server connected by', addr, 'at', now())
    connstream = ssl.wrap_socket(conn,
                                 server_side=True,
                                 certfile=ssl_certfile,
                                 keyfile=ssl_keyfile)
    
    thread.start_new_thread(main, (connstream,))
    conn.close()
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# client.py
 
import socket                                                    # Import socket module
import sys                                                       # Import system-specific parameters and functions
import os.path                                                   # Import module to manipulate paths
import ssl
import pprint
 
HOST = 'localhost'                                               # Get local machine name 
PORT = 3004                                                      # Reserve a port for service.
 
ssl_certfile = "/cs/home/server.crt"
 
 
def myrec(the_socket):
    total_data=[]
    while True:
        data = the_socket.recv(8192)
        if not data: break
        total_data.append(data)
    return ''.join(total_data)
 
def main():
  
    print '\nUser & Password Authentication\n'
 
    socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # Create a socket object
    ssl_sock = ssl.wrap_socket(socket1,
                           ca_certs=ssl_certfile,
                           cert_reqs=ssl.CERT_REQUIRED)
 
 
    ssl_sock.connect((HOST, PORT))                                # Connect to the port
                                        # Send remote input filename
    while(1):   
        user = raw_input('Please Enter User Name: ')
        print 'name send to server: ' + user   
        ssl_sock.send(user)
 
        data = ssl_sock.recv(1024)
        print data
    
        if data == "Unkown User Name, terminating... ":
           sys.exit('Unknown user name, terminating... \n')
 
        else:
          # data = ssl_sock.recv(2048)
   
           password= raw_input(data)
           print 'pas send to server: ' + password   
           ssl_sock.send(password)
    
           data = ssl_sock.recv(2048)
           if data == "User is logged in!\n":
              dir_name = ((r'/cs/home/client/%s') % (user))
                
              os.chdir(dir_name)
 
              print 'Client is logged in!\n'
 
              while(True):
                 print 'Instructions:'
                 print '"u [filename]" to upload the file to the server'
                 print '"d [filename]" to download the file from the server'
                 print '"q" to quit'
                 sys.stdout.write('%s> ' % user)
                 inputCommand = sys.stdin.readline().strip()
                 if (inputCommand == 'q'):
                    print "Program terminated. Bye!"
                    sys.exit("quit")
                 else:
                    string = inputCommand.split(' ', 1)
                    ssl_sock.send(inputCommand) 
                    inputFile = string[1]
                    if (string[0] == 'u'):
                      #ssl_sock.send(inputCommand)                                    # Send remote input filename
                      #string = inputCommand.split(' ', 1)
                      #inputFile = string[1]
 
                      if os.path.isfile(inputFile):                                # If requested file exists,
                         print "FILE on the client side EXISTS!"
                 ssl_sock.send("EXISTS")                           # Send respond to server
          
                         with open(inputFile, 'rb') as file_to_send:      # Create local file
                            for data in file_to_send:
                               ssl_sock.sendall(data)                    # Send requested file
                            print 'Upload is successful.'
                         #ssl_sock.close()                                  # Close the connection
                      else:
                         print "NO SUCH FILE on the client side!"  
            
                    elif (string[0] == 'd'):
                      #ssl_sock.send(inputCommand)                                    # Send remote requested filename
                      #string = inputCommand.split(' ', 1)
                      #inputFile = string[1]
 
                      data = ssl_sock.recv(1024)                                    # Send message from the server
                      if  data == "EXISTS":                                        # if requested file exists on the server
                         print "FILE on the server EXISTS!"
                         with open(inputFile, 'wb') as file_to_write:       # open requested file
                             while True:
                                 data = myrec(ssl_sock)  
                                 if not data:                      # until file totally sent.
                                     break
                                 file_to_write.write(data)                     # Store data in a file
                                 file_to_write.close()   
                             print 'Download is successful.'
   
                      else:
                          print "NO SUCH FILE on the server!"
        
                      #ssl_sock.close()                                              # Close the connection
 
                    else:
                        print "Wrong input."
 
          
        
           # print "exit client"
       
           elif data == "Incorrect password. ":
 
               # print 'Incorrect password. \n'
              sys.exit('Incorrect password. \n')
 
           else:
              print "Terminating... \n"
    
    ssl_sock.close()
    socket1.close()
    #ssl_sock.close()       
 
#msg = raw_input('Enter your name: ')
main()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.12.2016, 07:18
Ответы с готовыми решениями:

Как шифровать данные при передаче на сервер?
Немного запутался в шифровании,подскажите как будет правильнее шифровать 1)Есть клиент на андроиде который посылает по сети не...

Потеря пакетов при передаче клиент->сервер
Написал простенькую реализацию сервера и клиента. Клиент: #include "stdafx.h" #include <boost/asio.hpp> #include...

Клиент-сервер: При передаче одного кадра все хорошо, но при отсылке потоком возникает ряд ошибок
Добрый день, коллеги. Пишу клиент-серверное приложение для передачи потокового видео. Сервер на linux, клиент на win. Данные с камеры...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.12.2016, 07:18
Помогаю со студенческими работами здесь

Потеря пакетов при передаче клиент->сервер - Boost C++
Написал простенькую реализацию сервера и клиента. Клиент: #include "stdafx.h" #include <boost/asio.hpp> #include...

При передаче post запроса через прокси сервер в ответ приходят ошибки с прокси сервера
При передаче post запроса через прокси сервер в ответ прилетают ошибки с прокси сервера: <p><b>Invalid Request</b>...

Одинаково ли быстродействие: 1. при передаче параметров в функцию или 2. создание кортежа и передаче его в функцию?
Одинаково ли быстродействие: 1. при передаче параметров в функцию или 2. создание кортежа и передаче его в функцию? Зависит ли это от...

Ошибка при передаче данных в клиент-серверном приложении
Здравствуйте, вот код клиент-серверного приложения: Клиент: private void button1_Click(object sender, EventArgs e) { ...

Progressbar при передаче файла на сервер
Добрый день! Имею код для отправки файла на сервер public String sendPhoto(File file){ String total = ""; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru