from hashlib import sha256 ''' Primeira vez criar um usuário uma senha semente (Senha igual a registrada no servidor, senha principal) Um salt (o mesmo do Aplicativo) uma senha local (Senha para acesso ao gerador de senhas somente) Próximas vezes Digitar usuário e a senha local, se correto continua. Quando requisitado gera uma senha(Token). (algoritmo gerador de senhas) A senha (Token) deve ser gerada a partir da hash da senha semente do usuário (diferente da senha do usuário). O aluno deve propor uma variante do algoritmo OTP de Lamport, visto em aula. Este algoritmo deve levar em consideração o tempo (data hora minuto). As senhas devem ter validade de no máximo um minuto e só podem ser usadas uma única vez.(Fazer uma lista de senhas para ser usada no minuto. Ex.lista com 5 senhas para o minuto solicitado) somente gerar lista de senhas para o minuto solicitado. ''' USER = '' LOCAL_PASSWORD = '' SEED_PASSWORD = '' SALT = '' def check_setup(): try: with open('gerador.dat', 'r', newline='') as setup: lines = setup.readlines() if len(lines) != 4: init_setup() return True USER = lines[0] LOCAL_PASSWORD = lines[1] return True except: init_setup() return True def init_setup(): with open('gerador.dat', 'w', newline='') as setup: user = input('Digite o nome de usuário: ') password = sha256(input('Digite a senha local: ').encode('utf-8')).hexdigest() setup.write(USER + '\n') setup.write(LOCAL_PASSWORD) def check_password(): user = input('Digite o nome de usuário: ') password = input('Digite a senha local: ') if user == USER and password == LOCAL_PASSWORD: return True else: return False def generate_password(): input('Pressione alguma tecla para gerar uma senha...') def main(): if check_setup(): if check_password(): generate_password() else: print('Usuário ou senha incorretos!') else: print('Erro ao verificar setup!') if __name__ == '__main__': main()