Класс Client генерирует закрытый и открытый ключи с помощью встроенного алгоритма Python RSA . Заинтересованный читатель может обратиться к этому учебнику для реализации RSA. Во время инициализации объекта мы создаем закрытые и открытые ключи и сохраняем их значения в переменной экземпляра.
self._private_key = RSA.generate(1024, random) self._public_key = self._private_key.publickey()
Обратите внимание, что вы никогда не должны терять свой закрытый ключ. Для ведения учета сгенерированный закрытый ключ может быть скопирован на защищенное внешнее хранилище, или вы можете просто записать его ASCII-представление на листе бумаги.
Сгенерированный открытый ключ будет использоваться как личность клиента. Для этого мы определяем свойство с именем identity, которое возвращает HEX-представление открытого ключа.
@property def identity(self): return binascii.hexlify(self._public_key.exportKey(format='DER')) .decode('ascii')
Идентификационные данные уникальны для каждого клиента и могут быть общедоступными. Любой сможет отправить вам виртуальную валюту, используя эту личность, и она будет добавлена в ваш кошелек.
Полный код для класса Client показан здесь —
class Client: def __init__(self): random = Crypto.Random.new().read self._private_key = RSA.generate(1024, random) self._public_key = self._private_key.publickey() self._signer = PKCS1_v1_5.new(self._private_key) @property def identity(self): return binascii.hexlify(self._public_key.exportKey(format='DER')).decode('ascii')
Клиент тестирования
Теперь мы напишем код, который покажет, как использовать класс Client —
Dinesh = Client() print (Dinesh.identity)
Приведенный выше код создает экземпляр Client и присваивает его переменной Dinesh . Мы печатаем открытый ключ Dinesh , вызывая его метод идентификации . Вывод показан здесь —
30819f300d06092a864886f70d010101050003818d0030818902818100b547fafceeb131e07 0166a6b23fec473cce22c3f55c35ce535b31d4c74754fecd820aa94c1166643a49ea5f49f72 3181ff943eb3fdc5b2cb2db12d21c06c880ccf493e14dd3e93f3a9e175325790004954c34d3 c7bc2ccc9f0eb5332014937f9e49bca9b7856d351a553d9812367dc8f2ac734992a4e6a6ff6 6f347bd411d07f0203010001
Теперь давайте перейдем к созданию транзакции в следующей главе.