1
votes

Je souhaite utiliser un dictionnaire pour stocker de nouveaux noms d'utilisateur et mot de passe

Comment puis-je faire en sorte que ce code stocke de nouveaux noms d'utilisateur et mots de passe dans un dictionnaire avec le nom d'utilisateur (K) et le mot de passe (V)? Ou dois-je les stocker dans une liste, si oui, comment puis-je le faire? J'ai déjà écrit un autre morceau de code pour la connexion des utilisateurs qui reviennent qui accède au nom d'utilisateur et au mot de passe (K) et (V) dans le dictionnaire.

while True:
    new_user = input("Consider using alphanumeric and special characters \nCreate new user ID: ")
    if len(new_user) < 4:
        print("User ID must be more than 4 alphanumeric characters".upper())
        continue
    elif len(new_user) > 10:
        print("User ID must be less than 10 alphanumeric characters".upper()) 
        continue  
    else:
        print("Please confirm user ID ")
        break


3 commentaires

di [user_id] = password C'est aussi simple que cela


Cela dépend de la manière dont vous souhaitez les récupérer. Le stockage direct du mot de passe n'est pas la meilleure pratique.


@RishabhDeepSingh J'ai écrit un autre morceau de code pour référencer le dictionnaire. J'apprécie votre réponse. Quelle serait la meilleure pratique pour stocker les mots de passe?


3 Réponses :


2
votes

Vous pouvez créer un nouveau dictionnaire avec mydict = {} , puis stocker les clés et leurs valeurs avec mydict ["your-key"] = "your-value"

Vous pouvez trouver plus ici , gardez à l'esprit que sauvegarder des mots de passe textplain est vraiment dangereux, en particulier de cette manière!

En outre, comme l'a dit user8408080 :

Normalement, vous hacheriez instantanément le mot de passe et enregistreriez ce hachage. Lorsque l'utilisateur essaie de se connecter avec son mot de passe, cela va également être haché et les hachages seront comparés. De cette façon, personne ne peut voler votre mot de passe d'une base de données


3 commentaires

Ajout: Au cas où OP se demanderait, que faire d'autre: vous hacheriez normalement instantanément le mot de passe et sécuriser ce hachage. Lorsque l'utilisateur essaie de se connecter avec son mot de passe, celui-ci sera également haché et les hachages seront comparés. De cette façon, personne ne peut voler votre mot de passe dans une base de données


Bien merci! Puis-je l'ajouter à la réponse et vous taguer?


Pas de problème, c'est à ça que servent les commentaires: D



1
votes
users = [{'K':'john','V':'123456'}]

while True:
  username = input("Consider using alphanumeric and special characters \nCreate new user ID: ")
  if len(username) < 4:
    print("User ID must be more than 4 alphanumeric characters".upper())
    continue
  elif len(username) > 10:
    print("User ID must be less than 10 alphanumeric characters".upper()) 
    continue  
  else:
    # getting the password
    password = input('Password: ')
    # creating a new user with a dict
    new_user = {'K':username,'V':password}
    # adding the new user to dict
    users.append(new_user)

    # I added this for testing purposes, delete these 3 lines in real use
    if(len(users) > 1):
      break
    continue
    
    # and uncomment the next line
    # break

def login(username, password):
  for user in users:
    # checking if the given username and password matches a user in the users list
    if(user['K'] == username and user['V'] == password):
      print('Logged in')
      return True
  
  return False


print('\n\n\n')
print(users)
print('\n\n\n')
print('Log in')
username = input('Username: ')
password = input('Password: ')

login(username,password)
I added the users to a list and in login searched trough the list and checked for username and password matches.Note: In production never save password in plain text, hash them with something like sha256

2 commentaires

pourquoi utiliseriez-vous une liste de dictionnaires au lieu d'un simple dictionnaire? C'est en quelque sorte le pire des deux mondes ...


Je viens de créer un exemple ici, dans ces cas, une base de données devrait être utilisée pour plus d'efficacité. et je ne voulais pas stocker chaque nom d'utilisateur dans un dict, en fait ce serait beaucoup mieux si j'aimais ça, sry



2
votes

Pour développer davantage le code que vous avez fourni, voici un petit exemple. Vous devrez d'abord créer votre dictionnaire bien sûr. Je l'ai appelé users_and_passwords . Gardez à l'esprit que stocker les utilisateurs et les mots de passe directement dans un dictionnaire n'est pas du tout encouragé!

user:user123    has password: pass123

Une fois que vous avez correctement rempli vos variables utilisateur et mot de passe, vous pouvez les ajouter sous forme de paire clé: valeur au dictionnaire comme ceci:

for k, v in users_and_passwords.items():
    print (f'user: {k}\thas password: {v}')

Vous pouvez ensuite parcourir vos utilisateurs et leurs mots de passe comme ceci:

users_and_passwords[new_user] = user_password

Pour montrer que cela fonctionne, avec user123 comme nom d'utilisateur et pass123 comme mot de passe dans cet exemple, la sortie sera:

users_and_passwords = dict()

# get-user loop
while True:

    new_user = input("Consider using alphanumeric and special characters \nCreate new user ID: ")
    if len(new_user) < 4:
        print("User ID must be more than 4 alphanumeric characters".upper())
        continue
    elif len(new_user) > 10:
        print("User ID must be less than 10 alphanumeric characters".upper()) 
        continue  
    else:
        print("Please confirm user ID ")
        break


# get-password loop
while True:
    
    user_password = input("Create new user password: ")

    # do whatever logic here
    # let's assume its fine now
    break

Attention au stockage direct des mots de passe!

Comme d'autres l'ont déjà souligné, il suffit de brouiller votre mot de passe de manière irréversible (par exemple en le hachant, vous pouvez jeter un œil à this ) et utiliser le pass brouillé comme valeur pour votre utilisateur rendrait cela un peu plus sûr.


0 commentaires