69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
|
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()
|