2016-02-17 3 views
0

Я пытаюсь сделать клиент, который получает ключ AES от разъема over over.Python - Как обменять ключ AES через сокет

как клиент и сервер имеет этот код:

import base64 
from Crypto.Cipher import AES 
from Crypto import Random 

BS = 16 
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) 
unpad = lambda s : s[:-ord(s[len(s)-1:])] 

class AESCipher: 
def __init__(self, key): 
    self.key = key 

def encrypt(self, raw): 
    raw = pad(raw) 
    iv = Random.new().read(AES.block_size) 
    cipher = AES.new(self.key, AES.MODE_CBC, iv) 
    return base64.b64encode(iv + cipher.encrypt(raw)) 

def decrypt(self, enc): 
    enc = base64.b64decode(enc) 
    iv = enc[:16] 
    cipher = AES.new(self.key, AES.MODE_CBC, iv) 
    return unpad(cipher.decrypt(enc[16:])) 

Как обменять ключ AES от сервера к клиенту?

+0

Вы спрашиваете, как выполнить обмен ключами? Это может быть довольно сложно, и это не вопрос программирования. Вероятно, вы должны ответить на этот вопрос на обмен криптовато-стека или, еще лучше, провести некоторое исследование базовой криптографии. – zindorsky

+0

@zindorsky Спасибо за ответ. Если вы скажете, я сделаю больше исследований. Смогу ли я снова связаться с вами, когда у меня появятся дополнительные вопросы? – iYonatan

+0

Несомненно. Но я не эксперт по ключевым протоколам обмена. – zindorsky

ответ

0

Я делаю нечто подобное. Я сделал случайный ключ с RSA, а затем я отправил открытый ключ от клиента к серверу (предположив, что клиент - тот, который генерирует ключ AES). Таким образом, сервер шифрует ключ и отправляет его клиенту. Клиент Дешифрует ключ AES с помощью частного ключа RSA.