1. Modèle de référence Pour cette mission, j'ai fait référence au processus d'authentification de connexion Linux et combiné avec les services bancaires en ligne, Alipay et d'autres règles de verrouillage
1) Le processus d'authentification fait référence à la connexion Linux : après avoir entré le nom d'utilisateur et le mot de passe, vérifiez si le nom d'utilisateur existe et si l'utilisateur est verrouillé, puis vérifiez si le mot de passe est correct. Si la vérification échoue, il est correct. vous dira seulement que la vérification a échoué, et non si le nom d'utilisateur ou le mot de passe est erroné, ce qui augmente la difficulté du craquage par force brute
2) Concernant le comptage et le verrouillage des le nombre de saisies incorrectes , je fais référence à C'est ce que les banques et Alipay font, c'est-à-dire qu'elles ne se soucient que du nombre de fois où vous vous avez mal saisi et s'en moquent combien de fois vous avez mal saisi, ce qui signifie que vous avez mal saisi deux fois et la troisième fois. Si vous saisissez correctement, le compte précédent n'est pas effacé, c'est-à-dire que vous avez entré 1 000 fois aujourd'hui et perdu 997 fois correctement, et n'a été mal saisi que 3 fois. Désolé, vous devez quand même le verrouiller. Et les trois entrées incorrectes ne doivent pas nécessairement être consécutives. Il sera verrouillé après trois entrées incorrectes à trois reprises.
2. Concernant la sauvegarde dunombre et du statut, je considère la persistance et la sauvegarde via des fichiers, et l' accumulation et le verrouillage de chaque nombre d'erreurs de saisie sont enregistré. dans le fichier . Bien que cela augmente le fonctionnement du fichier, cela garantit la fiabilité du programme, de cette façon, lorsque le programme se termine, le décompte est toujours valide. Les types de fichiers sont les suivants :
alex sb lock 3 tom 666 déverrouiller 0 geng 888 déverrouiller 2
Le code est le suivant :
with open(filename,) key,values lines = print( f.write( .join(lines) + values.insert( f.write( .join(values) + # messages = {:[,,],:[,,],:[,, # write_file(messages, __name__ == active = username = input( users_dict = {} #用户字典,用于存放用户的信息,键-用户名,值- with open(,) lines = line user_list = users_dict[user_list[]] = user_list[ username users_dict[username][] == print( (users_dict[username][]) < user_pwd = input( users_dict[username][] == print( (users_dict[username][]) != print( % ( - (users_dict[username][ users_dict[username][] = (users_dict[username][]) + print( users_dict[username][] = users_dict[username][] = write_file(users_dict, elif username == print() 运行结果如下: 请输入你的用户名(输入quit退出):tom 请输入密码:22 还有2次机会,用户将被锁定! 请输入密码:22 还有1次机会,用户将被锁定! 请输入密码:22 对不起,您输入的次数过多,你的用户名已经被锁定,请联系管理员! 请输入你的用户名(输入quit退出):alex 您输入的用户名已经锁定,请联系管理员!
Description du code :
1. Deux contenus non abordés dans le cours d'aujourd'hui sont utilisés ici : les dictionnaires et les fonctions pour convertir les informations utilisateur en dictionnaires. la raison de l'enregistrement de cette manière est de déterminer si le nom d'utilisateur existe. Lors de la lecture du fichier, le nom d'utilisateur est directement utilisé comme clé du dictionnaire et d'autres informations sont utilisées comme valeur du dictionnaire en tête-à-tête. correspondance avec la clé. De cette façon, seul le nom d'utilisateur est nécessaire pour déterminer si le nom d'utilisateur existe. Utilisez simplement l'opérateur membre in pour juger
2. Lignes 61 et 62. du code termine le processus de transformation du fichier en dictionnaire.
Exemple de code original de Zhang Xiaoyu :
Points forts du code ci-dessus :
(1) continuer : mettre fin à cette boucle. Le code après la poursuite ne sera pas exécuté pour atteindre l'objectif de permettre à l'utilisateur de. saisissez à nouveau. Beaucoup La page Web permet aux utilisateurs de continuer à taper jusqu'à ce que l'utilisateur choisisse de s'inscrire ou de fermer la page Web
(2) Le document est relativement standardisé et contient des explications ;
(3) Le fichier est lu ligne par ligne, puis écrit dans le fichier ligne par ligne. La connaissance des listes et des dictionnaires doit être utilisée dans le processus de modification .
(4) " ".join(list) concatène des chaînes et des listes pour générer de nouvelles chaînes
(5) fractionnement de chaîne split() extend() entre ; répertorie l'épissage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!