This commit is contained in:
José Henrique 2023-09-11 17:30:47 -03:00
parent 4ebf1edfe2
commit 9fafd82b5c
3 changed files with 76 additions and 27 deletions

View File

@ -1,6 +1,8 @@
from hashlib import sha256 from hashlib import sha256
import localtoken
''' '''
Gerador:
Primeira vez criar Primeira vez criar
um usuário um usuário
uma senha semente (Senha igual a registrada no servidor, senha principal) uma senha semente (Senha igual a registrada no servidor, senha principal)
@ -15,6 +17,17 @@ Próximas vezes
Este algoritmo deve levar em consideração o tempo (data hora minuto). Este algoritmo deve levar em consideração o tempo (data hora minuto).
As senhas devem ter validade de no máximo um minuto e 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) As senhas devem ter validade de no máximo um minuto e 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. somente gerar lista de senhas para o minuto solicitado.
Servidor:
Quando acessado usa o mesmo algoritmo gerador de senhas anterior. Mas em instância separada.
A lista de senha gerada será a mesma nas duas partes, apesar de estarem em aplicativos separados e sem comunicação.
Verifica o usuário e se senha digitada esta na lista gerada e não foi usada e nem invalidada.
nesta caso apresenta Chave válida.
Atenção:
As senhas devem ter validade de no máximo um minuto e podem ser usadas uma única vez.
Senhas são geradas a partir de outras senhas, e se for usada uma chave todas as chaves geradas pela mesma devem ser invalidadas.
Se o cliente digitar uma senha válida o servidor aceita, caso contrario retorna mensagem de erro.
''' '''
USER = '' USER = ''
@ -27,11 +40,12 @@ def check_setup():
with open('gerador.dat', 'r', newline='') as setup: with open('gerador.dat', 'r', newline='') as setup:
lines = setup.readlines() lines = setup.readlines()
if len(lines) != 4: if len(lines) != 4:
init_setup() return False
return True
USER = lines[0] USER = lines[0]
LOCAL_PASSWORD = lines[1] LOCAL_PASSWORD = lines[1]
SEED_PASSWORD = lines[2]
SALT = lines[3]
return True return True
except: except:
init_setup() init_setup()
@ -40,26 +54,31 @@ def check_setup():
def init_setup(): def init_setup():
with open('gerador.dat', 'w', newline='') as setup: with open('gerador.dat', 'w', newline='') as setup:
user = input('Digite o nome de usuário: ') user = input('Digite o usuário: ')
password = sha256(input('Digite a senha local: ').encode('utf-8')).hexdigest() local_password = sha256(input('Digite a senha local: ').encode('utf-8')).hexdigest()
setup.write(USER + '\n') seed_password = sha256(input('Digite a senha semente: ').encode('utf-8')).hexdigest()
setup.write(LOCAL_PASSWORD) salt = sha256(input('Digite o salt: ').encode('utf-8')).hexdigest()
setup.write(user + '\n')
setup.write(local_password + '\n')
setup.write(seed_password + '\n')
setup.write(salt)
def check_password(): def check_password():
user = input('Digite o nome de usuário: ') local_password = sha256(input('Digite a senha local: ').encode('utf-8')).hexdigest()
password = input('Digite a senha local: ') if local_password == LOCAL_PASSWORD:
if user == USER and password == LOCAL_PASSWORD:
return True return True
else: else:
return False return False
def generate_password(): def generate_token():
input('Pressione alguma tecla para gerar uma senha...') token = localtoken.generate_token(SEED_PASSWORD, SALT)
print('Token gerado: ' + token[:8])
def main(): def main():
if check_setup(): if check_setup():
if check_password(): if check_password():
generate_password() input('Pressione alguma tecla para gerar uma senha...')
generate_token()
else: else:
print('Usuário ou senha incorretos!') print('Usuário ou senha incorretos!')
else: else:

7
trabalho2/localtoken.py Normal file
View File

@ -0,0 +1,7 @@
from hashlib import sha256
import time
# password = hashed password
def generate_token(password, salt):
time = time.strftime('%d%m%Y%H%M')
token = sha256((password + salt + time).encode('utf-8')).hexdigest()

View File

@ -1,3 +1,6 @@
from hashlib import sha256
import localtoken
''' '''
Quando acessado usa o mesmo algoritmo gerador de senhas anterior. Mas em instância separada. Quando acessado usa o mesmo algoritmo gerador de senhas anterior. Mas em instância separada.
A lista de senha gerada será a mesma nas duas partes, apesar de estarem em aplicativos separados e sem comunicação. A lista de senha gerada será a mesma nas duas partes, apesar de estarem em aplicativos separados e sem comunicação.
@ -9,3 +12,23 @@ Quando acessado usa o mesmo algoritmo gerador de senhas anterior. Mas em instân
Se o cliente digitar uma senha válida o servidor aceita, caso contrario retorna mensagem de erro. Se o cliente digitar uma senha válida o servidor aceita, caso contrario retorna mensagem de erro.
''' '''
SALT = ''
PASSWORD = ''
def main():
print('Servidor!')
SALT = sha256(input('Digite o salt: ').encode('utf-8')).hexdigest()
PASSWORD = sha256(input('Digite a senha: ').encode('utf-8')).hexdigest()
while True:
token = input('Digite o token: ')
if localtoken.generate_token(PASSWORD, SALT)[:8] == token[:8]:
print('Chave válida!')
else:
print('Chave inválida!')
if __name__ == '__main__':
main()