Python - Как реализовать читателей / писателей в шаблоне доски объявлений с зашифрованными записями - PullRequest
0 голосов
/ 16 июня 2011

У меня есть следующие классы:

class MessageBoard:

    def __init__(self):
        self.messages = []
        self.readers = {}

    def post(self, message):
        self.messages.append(message)

    def register_reader(self, reader):
        self.readers[reader.name] = reader.public_key


class Reader:

    def __init__(self, name, public_key, private_key):
        self.name = name
        self.public_key = public_key
        self.private_key = private_key

    def register_on_board(self, board):
        board.register_reader(self)

    def read(self, message):
        return self._decrypt(message)

    def _decrypt(self, message):
        #Unknown method using private_key


class Writer:

    def __init__(self):
        pass

    def write(self, message, board, intended_reader_name):
        public_key = board.readers[intended_reader_name]
        board.post(self._encrypt(message, public_key))

    def _encrypt(self, message, key_to_use):
        #Unknown method using public_key

Как реализовать генерацию открытого ключа / личного ключа и использование их в Writer()._encrypt и Reader()._decrypt?

1 Ответ

2 голосов
/ 16 июня 2011

Если вы действительно хотите это сделать (генерировать и хранить личные ключи централизованно), см. эти инструкции - соответствующий фрагмент кода ниже для справки:

>>> from Crypto.PublicKey import RSA
>>> from Crypto import Random
>>> random_generator = Random.new().read
>>> private_key = RSA.generate(1024, random_generator)
>>> public_key = private_key.publickey()
>>> enc_data = public_key.encrypt('abcdefgh', 32)
>>> private_key.decrypt(enc_data)
'abcdefgh'

Однако, имейте в виду, что , если я не ошибаюсь относительно цели вашего приложения , это небезопасный способ сделать это .

Я предполагаю, что Reader на самом деле не находится в той же системе, что и Writer - если они есть, я не вижу никакой причины, почему бы использовать PKI (асимметричное шифрование) в любомслучай, когда достаточно простого симметричного шифрования AES.

Если мое предположение верно, Reader должен генерировать закрытый ключ, как описано выше, и только передает открытый ключ Writer и импортируйте ключ , используя RSA.importKey - к сожалению, вам нужно pyCrypto >= 2.1 для этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...