coisas
This commit is contained in:
parent
4ebf1edfe2
commit
9fafd82b5c
|
@ -1,6 +1,8 @@
|
|||
from hashlib import sha256
|
||||
import localtoken
|
||||
|
||||
'''
|
||||
Gerador:
|
||||
Primeira vez criar
|
||||
um usuário
|
||||
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).
|
||||
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.
|
||||
|
||||
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 só 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 = ''
|
||||
|
@ -27,11 +40,12 @@ def check_setup():
|
|||
with open('gerador.dat', 'r', newline='') as setup:
|
||||
lines = setup.readlines()
|
||||
if len(lines) != 4:
|
||||
init_setup()
|
||||
return True
|
||||
return False
|
||||
|
||||
USER = lines[0]
|
||||
LOCAL_PASSWORD = lines[1]
|
||||
SEED_PASSWORD = lines[2]
|
||||
SALT = lines[3]
|
||||
return True
|
||||
except:
|
||||
init_setup()
|
||||
|
@ -40,26 +54,31 @@ def check_setup():
|
|||
|
||||
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)
|
||||
user = input('Digite o usuário: ')
|
||||
local_password = sha256(input('Digite a senha local: ').encode('utf-8')).hexdigest()
|
||||
seed_password = sha256(input('Digite a senha semente: ').encode('utf-8')).hexdigest()
|
||||
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():
|
||||
user = input('Digite o nome de usuário: ')
|
||||
password = input('Digite a senha local: ')
|
||||
if user == USER and password == LOCAL_PASSWORD:
|
||||
local_password = sha256(input('Digite a senha local: ').encode('utf-8')).hexdigest()
|
||||
if local_password == LOCAL_PASSWORD:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def generate_password():
|
||||
input('Pressione alguma tecla para gerar uma senha...')
|
||||
def generate_token():
|
||||
token = localtoken.generate_token(SEED_PASSWORD, SALT)
|
||||
print('Token gerado: ' + token[:8])
|
||||
|
||||
def main():
|
||||
if check_setup():
|
||||
if check_password():
|
||||
generate_password()
|
||||
input('Pressione alguma tecla para gerar uma senha...')
|
||||
generate_token()
|
||||
else:
|
||||
print('Usuário ou senha incorretos!')
|
||||
else:
|
||||
|
|
|
@ -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()
|
|
@ -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.
|
||||
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.
|
||||
|
||||
'''
|
||||
|
||||
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()
|
Loading…
Reference in New Issue