2010-12-10 6 views
2

может ли кто-нибудь дать мне образец кода, позволяющий пользователю ввести пароль два раза, сравнить их и распечатать текст, если они верны или нет, например, когда мы создаем нового пользователя. Заранее спасибо ...подтверждение пароля perl

+0

Какие модули вы используете? – Hanmyo

+0

Если вашему коду необходимо сохранить пароль, чтобы пароли, введенные пользователем, были подтверждены позже, используйте [криптографическую хеш-функцию] (http://en.wikipedia.org/wiki/Cryptographic_hash_function), например, [SHA- 2] (http://en.wikipedia.org/wiki/SHA-2). –

+0

@hanmyo - я новичок .. это требуется для мастерской одного из моих подданных. Я знаю, что я делаю кодирование в java и php, но не знаю, как использовать модули на самом деле. – user403295

ответ

2

От 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"; 
} 

Изменить в соответствии с вашими потребностями.

+0

да, это хорошо, и я думаю, что видел раньше. Я постараюсь изменить, я новичок. – user403295

+0

это нехорошо, это код для проверки пароля от ранее зашифрованного пароля, а не для проверки двух записей для равенства – ysth

+0

Да, но он показывает, как читать пароль на консоли, и я решил, что просто скопирую весь фрагмент с атрибуцией. Кажется, этого было достаточно, чтобы заставить OP двигаться. – ephemient

0

здесь является ответ, основанный на намеком ephemient в .. Я не нуждаюсь в первой строке, что я удален и если случай пе предполагают, чтобы эк, вероятно, означает, что равно:) это выглядит он работает ..

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

Это * никогда не даст ошибку «Извините ...». Не используйте crypt() для этого. – ysth

0

crypt - красная селедка.

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

Это почти * точно * то, что ОП придумал. – ephemient

+0

@emhemient: за исключением того, что он работает ... – ysth

+0

благодарит за ответ. При необходимости я модифицировал образец эфемона. Ответ ниже. И он очень похож на ваш, кроме случая. если вы используете «ne» между $ password и $ check_again, он падает на часть «Извините», хотя пароли одинаковы. Поэтому вместо «ne» я использовал «eq». И это выглядит так. Я тоже попробую. Я еще не запустил его. Тогда я также проверю ваш ответ .. Еще раз спасибо .. Отправлено ... – user403295

Смежные вопросы