Forum >> Programmazione Python >> Files e Directory >> Errore di lettura del file username.txt (hash sha3 512)

Pagina: 1

Salve a tutti,
Questo è il mio primo messaggio sul forum al quale mi sono iscritto proprio perché non sto trovando una soluzione al mio problema.




Mi spiego in breve, ho scritto una shell in Py 3.6.2 come passatempo ma sto riscontrando un problema che ne pregiudica parzialmente l'uso.

Il problema è il seguente : L'utente quando si registra deve scegliere un username e una password e fin qua tutto va bene, successivamente le credenziali vengono manipolate nella maniera seguente :

L'username è il nome del file .txt

La password viene hashata (hash sha3 512) e scritta sul file appena creato

Per salvare le modifiche è necessario riavviare il programma (Py non crea il file finché l programma non termina a quanto pare)

Il file è creato correttamente e il digest è contenuto all'interno del file

Tutto apposto sembra

Al momento di effettuare il login sorge un problema : non so se è colpa del fatto che si tratti di un hash (dovrebbe leggerlo come stringa no?) o qualcos'altro, fatto sta che ogni volta il programma dà errore come se le credenziali fossero errate anche se ho più volte verificato che gli hash e le credenziali corrispondono

Aiuto!!




P.S. Il codice è allegato ma lo trovate anche a questo link http://repl.it/@Crazyprogrammer/consoletest3

Grazie :)
Allegati
Boh? Quel codice è una collezione di script scorrelati tra loro, e tra l'altro scritti malissimo in modo che non sarebbe neanche possibile importarli... tutta quella roba deve essere buttata e riscritta daccapo con un minimo di senso comune (niente codice a livello del modulo, per dire...). Non ho neanche idea di dove dovrei guardare per vedere un problema. Dovunque guardi vedo solo problemi, di tutti i tipi.


Facciamo così: prima di tutto scorpora il codice che ti dà problemi, riducilo a un esempio concreto che faccia questo:
1) crea il file partendo da nome e psw
2) apre il file e verifica la psw.
Tutto questo non dovrebbe richiedere più di venti/trenta righe. Così almeno cominciamo a vedere di che cosa stiamo parlando.


Poi, non limitarti a descrivere in parole vaghe "che hai un errore". Quale errore? Dove? Posta lo stacktrace dell'errore, e vediamo.


In ogni caso:
> Per salvare le modifiche è necessario riavviare il programma
> (Py non crea il file finché l programma non termina a quanto pare)
Ma no, quando mai.

https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
Grazie mille della risposta.



In primo luogo mi dispiace che trovi il mio codice confusionale e in effetti ho scritto quel post di fretta e ho caricato l'intero codice senza pensare che in effetti l'errore era solo in parte di esso.




In merito a quanto hai detto forse mi sono spiegato male, la shell di python non dà errore semplicemente il programma non fà quello che dovrebbe ovvero non confronta correttamente l'input inviato dall'utente con l'hash contenuto nel file




Di seguito come mi hai chiesto le righe di codice incriminate






import hashlib

import os

import random

usr=""

while len(usr) <= 0:

usr=input("Username:\n")

if len(usr) == 0:

print("L'username non può essere vuoto\n")

psw=""

try:

doc2=open(str(usr)+str(".txt"),"x")

except FileExistsError:

print("Esiste già un utente registrato con quell'username,per favore scegline un altro")

while len(psw) <= 0:

psw=input("Password:\n")

doc2=open(str(usr)+str(".txt"),"r+")

tohash2=hashlib.sha3_512(psw.encode())

passhash=tohash2.hexdigest()

doc2.write(passhash)

doc2.close()

print("Processo Terminato.Digita exit nella shell e successivamente avvia nuovamente il programma per applicare le modifiche.\n")

if len(psw) == 0:

print("La password non può essere vuota\n")




Questo provvede a "registrare" le credenziali




P.S. non vedo dove sia la confusione,nel codice mi sembra tutto molto chiaro




Per quanto riguarda il login






usr=""

var=True

while len(usr) <= 0:

usr=input("Username: ")

if len(usr) == 0:

print("L'username non può essere vuoto")

psw=""

while len(psw) <= 0:

psw=input("Password: ")

if len(psw) == 0:

print("La password non può essere vuota")

try:

doc=open(str(usr)+str(".txt"),"r")

lines=doc.readlines()

hashedpsw=str(lines0)

except FileNotFoundError:

print("L'username non corrisponde a nessun utente registrato")

if hashedpsw == psw:

print("Login effettuato con successo")

import logged

else:

print("Credenziali Errate")







Spero in un'altra risposta veloce quanto la prima,grazie in anticipo




P.P.S Grazie per le critiche,proverò a migliorare il modo in cui scrivo, ma avresti dei consigli specifici?


Non ho ben capito come mantenere l'indentazione del codice per cui mi scuso in anticipo
In merito a quanto dici per la creazione del file anche io sapevo che il file viene creato subito (ho py sul computer ma per comodità uso repl.it come compiler online)



Ho provato più volte ma il file viene creato nella directory del programma solo quando digito exit




Provato su IDLE Python 3.6.2 su MacOS X 10.11.6 El Capitan
P.S. Potrei aver risolto avevo fatto un errore cretino
Te l'ho detto, finché non posti un pezzo di codice che apre un file, ci scrive dentro qualcosa, lo chiude, tutto quello che posso dirti è che sbagli qualcosa.

Però se preferisci non postare codice, possiamo andare avanti a chiacchierare all'infinito... come preferisci.

https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide


Pagina: 1



Esegui il login per scrivere una risposta.