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,12 +1,14 @@
from hashlib import sha256 from hashlib import sha256
import localtoken
''' '''
Primeira vez criar Gerador:
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)
Um salt (o mesmo do Aplicativo) Um salt (o mesmo do Aplicativo)
uma senha local (Senha para acesso ao gerador de senhas somente) uma senha local (Senha para acesso ao gerador de senhas somente)
Próximas vezes Próximas vezes
Digitar usuário e a senha local, se correto continua. Digitar usuário e a senha local, se correto continua.
Quando requisitado gera uma senha(Token). Quando requisitado gera uma senha(Token).
(algoritmo gerador de senhas) (algoritmo gerador de senhas)
@ -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()