SUAI-TaskPlanner-Contest / TaskPlanner

Client application for working with todos and syncing with CalDAV servers
MIT License
3 stars 2 forks source link

58 create class chipher #62

Closed Dary5 closed 1 year ago

Dary5 commented 1 year ago

## Создание класса шифрования

Related Issue #58
Reviewer requrements Знание основ шифрования

Code changes

Создан код шифера для шифровки и дешифровки логина (email) и пароля.

How to test

  1. Задать функции шифровки логин, пароль и пинкод.
  2. Получить зашифрованные логин и пароль.
  3. Ввести зашифрованные логин и пароль и пинкод в функцию дешифровки.
  4. Получить дешифрованные логин и пароль.
  5. Сравнить зашифрованные и дешифрованные данные. Если данные одинаковы, то задание выполнено.
from TaskChipher import chipherCode

raw_login = input('Введите логин: ')
raw_password = input('Введите пароль: ')
pincode = input('Введите пинкод: ')

login = chipherCode.encryptStr(raw_login, pincode)
password = chipherCode.encryptStr(raw_password, pincode)
dec_login = chipherCode.decryptStr(login, pincode)
dec_password = chipherCode.decryptStr(password, pincode)

if (raw_login == dec_login) and (raw_password == dec_password):
    print('OK')
else:
    print('ERROR')
astronik00 commented 1 year ago

@Dary5

Также считаю, что нужно сделать методы класса static.

astronik00 commented 1 year ago

Также имя класса стоит сделать CamelCase-ом.

astronik00 commented 1 year ago

Сам файл "chipher_class" надо переименовать, поскольку теперь это модуль. Например в "chipher_module".

import aes_cipher

data_encrypter = aes_cipher.DataEncrypter()
data_decrypter = aes_cipher.DataDecrypter()

def encrypt(raw, pin):
    data_encrypter.Encrypt(raw, pin)
    return data_encrypter.encrypted_data

def decrypt(enc, pin):
    data_decrypter.Decrypt(enc, pin)
    return data_decrypter.decrypted_data.decode('UTF-8')

Пример использования:

import Code.chipher_class as AESEncryptor

login = input('Введите логин: ')
password = input('Введите пароль: ')
pincode = input('Введите пин-код: ')

en_login, en_password = AESEncryptor.encrypt(login, pincode), AESEncryptor.encrypt(password, pincode)
de_login, de_password = AESEncryptor.decrypt(en_login, pincode), AESEncryptor.decrypt(en_password, pincode)

print(f"decoded login: {de_login}, decoded password: {de_password}")

Также процесс кодирования занимает ОЧЕНЬ много времени (6-7 секунд!!!!!), это просто ужасно при последовательном выполнении. Теоретически здесь необходимо распараллелить процессы. Хочу заметить, что на это должна была обратить внимание ты и сообщить об этом.