2010-12-10 8 views
2

quelqu'un peut-il me donner un exemple de code pour permettre à un utilisateur d'entrer un mot de passe deux fois et les comparer et imprimer un texte s'ils sont corrects ou non, comme lorsque nous créons un nouvel utilisateur. Merci à l'avance ...perl mot de passe confirmation

+0

Quels modules utilisez-vous? – Hanmyo

+0

Si votre code doit stocker le mot de passe afin que les mots de passe entrés par l'utilisateur puissent être confirmés plus tard, utilisez [une fonction de hachage cryptographique] (http://en.wikipedia.org/wiki/Cryptographic_hash_function), comme par exemple, [SHA- 2] (http://en.wikipedia.org/wiki/SHA-2). –

+0

@hanmyo - Je suis un débutant .. cela est nécessaire pour l'atelier d'un de mes sujets. Je sais faire du codage en Java et PHP mais je ne sais pas comment utiliser les modules en fait .. – user403295

Répondre

2

De perldoc -f crypt,

$pwd = (getpwuid($<))[1]; 

system "stty -echo"; 
print "Password: "; 
chomp($word = <STDIN>); 
print "\n"; 
system "stty echo"; 

if (crypt($word, $pwd) ne $pwd) { 
    die "Sorry...\n"; 
} else { 
    print "ok\n"; 
} 

Modifier pour répondre à vos besoins.

+0

oui c'est bon et je pense que j'ai déjà vu .. je vais essayer de changer, je suis un débutant .. merci. – user403295

+0

ce n'est pas bon, c'est le code pour vérifier un mot de passe contre un mot de passe précédemment crypté, pas pour vérifier deux entrées pour l'égalité – ysth

+0

Oui, mais il montre comment lire un mot de passe à la console, et je pensais juste copier l'extrait entier avec attribution. Semble avoir été assez pour aller OP. – ephemient

0

est la réponse ici basée sur le soupçon de ephemient .. J'ai besoin la première ligne que j'ai enlevé et si le cas supposons ne être eq, signifie probablement égale:) il semble qu'il fonctionne ..

system "stty -echo"; 
print "Password: "; 
chomp($word = <STDIN>); 
print "Password again: "; 
chomp($pwd = <STDIN>); 
print "\n"; 
system "stty echo"; 

if (crypt($word, $pwd) eq $pwd) { 
    die "Sorry...\n"; 
} else { 
    print "ok\n"; 
} 
+0

Cela ne donnera * jamais * l'erreur "Désolé ...". N'utilisez pas crypt() pour cela. – ysth

0

crypte est un hareng rouge.

system "stty -echo"; 
print "Password: "; 
chomp(my $password = <STDIN>); 
print "\nPassword again: "; 
chomp(my $check_again = <STDIN>); 
print "\n"; 
system "stty echo"; 

if ($password ne $check_again) { 
    die "Sorry...\n"; 
} else { 
    print "ok\n"; 
} 
+0

C'est presque * exactement * ce que l'OP a proposé. – ephemient

+0

@ ephemient: sauf que cela fonctionne ... – ysth

+0

merci pour la réponse. J'ai modifié l'échantillon de l'éphémère comme requis. La réponse est ci-dessous. Et elle est très semblable à la vôtre sauf si c'est le cas. Si vous utilisez "ne" entre $ password et $ check_again, il tombe dans la partie "Sorry" bien que les mots de passe soient les mêmes. J'ai donc utilisé 'eq' au lieu de 'ne'. Et ça a l'air ça marche. Je vais essayer le vôtre aussi .. Je n'ai pas encore couru. Ensuite, je vais également vérifier votre réponse .. Merci encore .. Respects .. – user403295

Questions connexes