def main(): # 리턴값이 문자로 옮 sel_1 = int(main_interface()) # print('sel_1 : ', sel_1) # 대칭키 if sel_1 == 1: print ('') sel_2 = int(Sym_interface()) if sel_2 == 1: print ('') print ('## 대칭키 암호화 ##') symmetric.encrypt() elif sel_2 == 2: print ('') print ('## 대칭키 복호화 ##') # 일방향 elif sel_1 == 2: print ('') print ('## 일방향 알고리즘 ##') hash.hashing() # 인코딩/디코딩 elif sel_1 == 3: print ('') sel_2 = int(Encode_interface()) if sel_2 == 1: print ('') print ('## 인코딩 ##') elif sel_2 == 2: print ('') print ('## 디코딩 ##')
def test(): ''' Directly, URL don't open any page. That's intermediate URL for processing data, reveived from HTML-forms ''' try: variables.my_email_error[0], variables.my_password_error[ 0] = None, None if current_user.is_authenticated: return redirect(url_for('render_table')) form = register_form() if form.validate_on_submit(): password = hash.hashing(register_form().password.data) email = register_form().email.data user_info_to_db = users(email=register_form().email.data, user_password=password) db.session.add(user_info_to_db) db.session.commit() email = users.query.filter_by(email=form.email.data).first() login_user(email, remember=register_form().remember.data) flash(f'accounted created for {register_form().email.data}') return redirect(url_for('tg_autentification')) # put errors in variables. That's not "musthave", but it's more comfortable in my case for me if form.email.errors: for error in form.email.errors: variables.my_email_error[0] = error if form.password.errors: for error in form.password.errors: variables.my_password_error[0] = error # have finished to put return redirect(url_for('errors')) except Exception as ex: config_file.ex_catcher(current_user.id, "test", ex) return redirect(url_for('dope_shit', ex=ex))
def login(): '''URL where user is logging in''' try: variables.my_email_error[0], variables.my_password_error[ 0] = None, None if current_user.is_authenticated: return redirect(url_for('render_table')) form = login_form() if form.validate_on_submit(): email = users.query.filter_by(email=form.email.data).first() if email: if email.user_password == hash.hashing(form.password.data): login_user(email, remember=form.remember.data) next_page = request.args.get('next') return redirect(next_page) if next_page else redirect( url_for('render_table')) else: variables.my_password_error[ 0] = "There's a mistake in password. Please check that." else: variables.my_email_error[ 0] = "There's a mistake in email. Please check that." return redirect(url_for('second_login')) except Exception as ex: config_file.ex_catcher(current_user.id, "login", ex) return redirect(url_for('dope_shit', ex=ex))
def collect_info(path): stat_info = os.stat(path) info = { STAT_USER: pwd.getpwuid(stat_info.st_uid)[0], STAT_GROUP: grp.getgrgid(stat_info.st_gid)[0], STAT_MODE: oct(stat_info.st_mode & 07777), STAT_MOD_DATE: datetime.fromtimestamp(stat_info.st_mtime).date().__str__() } if not os.path.isdir(path): info[STAT_SIZE] = stat_info.st_size from hash import hashing info[STAT_DIGEST] = hashing(path) return info
def diffie_hellman(): print("Difiie-Hellman") #prime = generation_premier() # impossible de passer par le générateur, car l'élévation d'un nombre # à une puissance de 512 bits est trop coûteuse en ressources. # A défaut, utilisation d'un premier plus petit prime = generation_petit_premier(1000) # génération de la base base = generation_petit_premier(prime) # choix des secrets secret_A = randint(2, prime - 1) secret_B = randint(2, prime - 1) # calcul y1=a^x1 mod p A = (base**secret_A) % prime # calcul y2=a^x2 mod p B = (base**secret_B) % prime # calcul y2^x1=K secret_Ka = (B**secret_A) % prime # calcul y1^x2=K secret_Kb = (A**secret_B) % prime print("secret de A : " + str(secret_A) + " ; secret de B : " + str(secret_B)) if secret_Ka == secret_Kb: # hashage pour avoir une clé de 64 bits secret_hash = hashing(bitarray(bin(secret_Kb)[2:]), 32, 2) # passage en hexadecimal secret_hash = ''.join( ["{:02x}".format(byte) for byte in bytearray(secret_hash)]) print("clé partagée crée : " + str(secret_hash)) else: print("/!/ échec de la génération de la clé partagée ...")
def verif_signature(self, s1, s2, message): # si s1 et s2 sont incohérents if 0 < s1 or s1 < self._q or 0 < s2 or s2 < self._q: return False else: w = self._mod_inverse(s2, self._q) #transformation de la chaine en bits m = ''.join( format(i, 'b') for i in bytearray(message, encoding='utf-8')) # hashage h = hashing(m, 32, 2) # passage en integer h = bitarray.util.ba2int(h) # calculs de vérification u1 = (h * w) % self._q u2 = (s1 * w) % self._q v = ((self._g**u1) * (self._y**u2) % self._p) % self._q if v == s1: # signature incorrecte return True else: return False
def generation_signature(self, message): #définition de s s = 0 s1 = 0 inv_s = 0 # inverse modulaire de s while s1 == 0 or inv_s == 0: s = randint(2, self._q - 1) inv_s = self._mod_inverse(s, self._q) s1 = ((self._g**s) % self._privKey) % self._q #transformation de la chaine en bits m = ''.join( format(i, 'b') for i in bytearray(message, encoding='utf-8')) # hashage h = hashing(m, 32, 2) # passage en integer h = bitarray.util.ba2int(h) #calcul de s2 s2 = (h + s1 * self._privKey) * inv_s # retour de la signature return [s1, s2]
def requests_list(message, chat_id, r_json): ''' Foo takes message and chat_id from Teleram server and make an answer to user. There are 4 main levels, every level means a certain step in work of Telegram Bot. This foo is more like a distributor of functions, that realy have a weight, do action. Also first lines of foo check authorization of user in Telegram Bot. ''' try: if checking_chat_id(chat_id) == False and "@" in message: try: print(chat_id, message) print("UPDATE users SET telegram_id='{}', user_level='start password' \ WHERE email='{}'". format(chat_id, str(message))) config_file.db_update("UPDATE users SET telegram_id='{}', user_level='start password' \ WHERE email='{}'". format(chat_id, str(message))) telegram_api_request.ButtonCreate(message_text='Теперь напиши пароль', chat_id=chat_id, texts_of_button=['']).return_button() except: telegram_api_request.ButtonCreate(message_text='Что-то пошло не так. напиши почту, ' + \ 'которую ты зарегистрировал на сайте. Именно почту.\n' + \ 'Если не зарегистрирован на сайте, то следуте зарегистрироваться сначала. ' + \ 'Ссылка на сайт: https://telegrampyvocab.herokuapp.com/registration', chat_id=chat_id, texts_of_button=['']).\ return_button() elif checking_chat_id(chat_id) == False and "@" not in message: telegram_api_request.ButtonCreate(message_text='Напиши почту, на которую зарегистрирован аккаунт на сайте. ' + \ 'Пожалуйста, не ошибись при записи :) ', chat_id=chat_id, texts_of_button=['']).\ return_button() else: pk_of_user_in_db = config_file.db_select("SELECT id from users where telegram_id={}".format(chat_id))[0][0] message_list = ['Добавить новое слово', 'Удалить слова', 'Внести изменения в словарь', 'Проверять слова!' ] if message in message_list: if message=='Добавить новое слово': variables.Variables(message,chat_id,pk_of_user_in_db).add_word() elif message=='Удалить слова': variables.Variables(message, chat_id, pk_of_user_in_db).delete_word() elif message=='Внести изменения в словарь': variables.Variables(message, chat_id,pk_of_user_in_db).modif_dict() elif message=='Проверять слова!': variables.Variables(message, chat_id, pk_of_user_in_db).check_word() else: level = config_file.db_select("SELECT user_level FROM users \ WHERE telegram_id = {}".format(chat_id))[0][0] if level == 'start password': try: tg_password = hash.hashing(str(message)) if tg_password == config_file.db_select("SELECT user_password FROM users \ WHERE telegram_id = {}".format(chat_id))[0][0]: modificate_level(pk_of_user_in_db, 'default') telegram_api_request.ButtonCreate(message_text='Ты авторизован! Теперь добавь первое слово. ' + \ 'Нажми кнопку.', chat_id=chat_id, texts_of_button=['Добавить новое слово']).\ return_button() else: modificate_level(pk_of_user_in_db, 'default') telegram_api_request.ButtonCreate(message_text='Пароль не тот :(\nПопробуй еще раз, пожалуйста. ' + \ 'Напиши почту сначала. ', chat_id=chat_id, texts_of_button=['']).\ return_button() except: telegram_api_request.ButtonCreate(message_text='Что-то пошло не так. Посмотри внимательно свой пароль. ' + \ 'Напиши снова почту', chat_id=chat_id, texts_of_button=['']).\ return_button() elif level == 'adding word': config_file.db_update("INSERT INTO whole_vocab (word_in_whole, user_id, status_of_word_in_whole) \ VALUES('{}', {}, 'doing')". format(message.rstrip()[::-1].rstrip()[::-1], pk_of_user_in_db)) modificate_level(pk_of_user_in_db, 'adding_definition') telegram_api_request.ButtonCreate(message_text='Напиши дефиницию или перевод данного слова.', chat_id=chat_id, texts_of_button=['Добавить новое слово', 'Удалить слова', 'Внести изменения в словарь']).\ return_button() elif level == 'adding_definition': config_file.db_update("UPDATE whole_vocab SET definition_of_word = '{}', status_of_word_in_whole = 'not done' \ WHERE user_id = {} AND status_of_word_in_whole='doing' ". format(message.rstrip()[::-1].rstrip()[::-1], pk_of_user_in_db)) modificate_level(pk_of_user_in_db, 'default') telegram_api_request.ButtonCreate(message_text='Новое слово добавлено.', chat_id=chat_id, texts_of_button=['Добавить новое слово', 'Проверять слова!', 'Внести изменения в словарь', 'Удалить слова'], )\ .return_button() elif level == 'default': bul, word = operations.checking_word(message, pk_of_user_in_db) if bul == True: telegram_api_request.ButtonCreate(message_text='Правильно. ' + '\n\n' + operations.show_word(pk_of_user_in_db), chat_id=chat_id, texts_of_button=['Добавить новое слово', 'Внести изменения в словарь', 'Удалить слова', 'Проверять слова!']).\ return_button() else: telegram_api_request.ButtonCreate(message_text='Неправильно.\nПравильно так: ' + word + '\n\n' + \ operations.show_word(pk_of_user_in_db), chat_id=chat_id, texts_of_button=['Добавить новое слово', 'Внести изменения в словарь', 'Удалить слова', 'Проверять слова!']).\ return_button() elif level == 'deleting': if len(config_file.db_select("SELECT * FROM whole_vocab WHERE user_id={}".format(pk_of_user_in_db))) > 0: delete_message = operations.delete_word(numbers=message,pk_of_user_in_db=pk_of_user_in_db) if delete_message == 'Пожалуйста, не используйте буквы, предпочтительно использовать такой формат: \n\n 1, 2, 3': telegram_api_request.ButtonCreate(message_text='Пожалуйста, не используйте буквы, ' + \ 'предпочтительно использовать такой формат: \n\n 1, 2, 3', chat_id=chat_id, texts_of_button=['Добавить новое слово', 'Проверять слова!', 'Внести изменения в словарь']).\ return_button() else: telegram_api_request.ButtonCreate(message_text='Удалено!', chat_id=chat_id, texts_of_button=['Добавить новое слово', 'Проверять слова!', 'Внести изменения в словарь', 'Удалить слова']).\ return_button() else: telegram_api_request.ButtonCreate(message_text='Словарь в данный момент пустой.\n\nНеловко это сообщать, ' + \ 'но сначала следует добавить слова прежде, чем удалять их :) ', chat_id=chat_id, texts_of_button=['Добавить новое слово', 'Проверять слова!', 'Внести изменения в словарь', 'Удалить слова']).\ return_button() elif level == 'modificate word': definition = operations.modificate_word(message, pk_of_user_in_db) if definition == 'Что-то пошло не так. Попробуй, пожалуйста, набрать только номер, без других символов. \ Возможно, в этом дело' \ or definition == 'Что-то пошло не так. Попробуй еще разок именно в формате таком: \n 1. Слово. ': telegram_api_request.ButtonCreate(message_text=definition, chat_id=chat_id, texts_of_button=['']).return_button() else: modificate_level(pk_of_user_in_db, 'modificate definition') telegram_api_request.ButtonCreate(message_text=definition, chat_id=chat_id, texts_of_button=['Добавить новое слово','Удалить слова','Проверять слова!', 'Внести изменения в словарь']).\ return_button() elif level == 'modificate definition': result_of_operation = operations.modificate_definition(message, pk_of_user_in_db) telegram_api_request.ButtonCreate(message_text=result_of_operation, chat_id=chat_id, texts_of_button=['Добавить новое слово','Удалить слова', 'Проверять слова!', 'Внести изменения в словарь']).\ return_button() except Exception as ex: config_file.db_select("SELECT user_level FROM users WHERE telegram_id={}".format(chat_id)) telegram_api_request.ButtonCreate(message_text='Что-то пошло не так. Затруднительно сказать на каком именно этапе произошла ошибка. ' + \ '\n\nПередай информаци Диме, сообщив ошибку., ошибка такая{}'. format(str(ex)), chat_id=chat_id, texts_of_button=['']).\ return_button()
def Hash(R, C1): R.hash[C1] = hashing(R.size) key = find_index(C1, R.column) for Ri in range(0, R.size): R.hash[C1].insert(R.data[Ri][key], Ri)