# pycrypto необходим для AES # pip3 install pycrypto from Crypto.Cipher import AES import base64 # Выравнивание шифруемой строки def paddingSetup(text): nLength = 16 - (len(text.encode('utf-8')) % 16) text += chr(nLength) * nLength return text # Удаление символов выравнивания def paddingRemove(text): textLen = len(text) if textLen == 0: return text asc = ord(text[-1]) if asc >= 16: return text return text[0:-asc] # Алгоритм симметричного шифрования AES # Ключем шифрования является точка секрета, полученная из приватного и публичного ключа class CipherAES: def __init__(self, curve, secretPoint): # в качестве ключа используется хэш точки секрета self.key = secretPoint.md5() # в качестве инициализирующего вектора - урезанный хэш базовой точки подгруппы эллиптической кривой self.iv = curve.g.md5() # инициализация шировальщика def cipher(self): return AES.new(key=self.key, mode=AES.MODE_CBC, IV=self.iv) # Шифровка сообщения def encrypt(self, text): data = self.cipher().encrypt(bytes(paddingSetup(text), 'utf-8')) return str(base64.b64encode(data), 'utf-8') # Расшифровка сообщения def decrypt(self, encryptedText): data = base64.b64decode(encryptedText) bytes = self.cipher().decrypt(data) blank = str(bytes, 'utf-8').strip() return paddingRemove(blank)