2010-12-10 14 views
2

誰でもパスワードを2回入力して比較し、新しいユーザーを作成するときのように、正しいかどうかを確認してテキストを印刷するサンプルコードを提供できます。 perldoc -f cryptから事前のおかげで...perlパスワード確認

+0

どのモジュールを使用していますか? – Hanmyo

+0

ユーザ入力パスワードを後で確認できるようにパスワードを保存する必要がある場合は、[SHA- 2](http://en.wikipedia.org/wiki/SHA-2)。 –

+0

@hanmyo - 私は初心者です。これは私の科目の1つのワークショップに必要です。私はjavaとphpでコーディングすることを知っていますが、実際にモジュールを使う方法はわかりません。 – user403295

答えて

2

$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

これは良くありません。これは、以前に暗号化されたパスワードに対してパスワードをチェックするコードです.2つのエントリが等しいかどうかを確認するのではありません。 – ysth

+0

はい、コンソールでパスワードを読み取る方法を示しています帰属するスニペット全体OPを手に入れるのに十分だったようです。 – ephemient

0

はephemientのヒントに基づいて回答です..私はケースならば、NE eqですると仮定私は削除最初の行を必要としていけない、おそらく同じ意味:)それは作品に見える..

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

陰窩は赤いニシンです。

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

これはOPが出てきたこととほとんど同じです。 – ephemient

+0

@ephemient:それが動作することを除いて... – ysth

+0

答えに感謝します。私は必要に応じてエフェメリエントのサンプルを修正しました。答えは以下の通りです。それ以外の場合はあなたと非常によく似ています。 $ passwordと$ check_againの間に "ne"を使用すると、パスワードは同じですが "Sorry"部分に落ちます。だから私は 'ne'の代わりに 'eq'を使いました。そして、それは動作するように見えます。私もあなたのものを試してみるだろう。また、あなたの答えをチェックします..ありがとうございました。再度...アドレス... – user403295