• 締切済み

crypt

Perlの勉強をしていたところ、  $aaa=crypt('aiu','eo')  $bbb=crypt('aiu',$aaa) の時に、$aaaと$bbbは同一の値であるという文がありましたが、何故そうなるのかが解りません。cryptの暗号化の規則等解る方がいらっしゃいましたら教えてください。

みんなの回答

noname#9414
noname#9414
回答No.4

全然話題には関係ありませんが、ichigo様の仰っている暗号化で 使用する名前を・・・ 可逆暗号化:元々あった文字列を暗号化したら、また何かしらの関数を       使用して元の文字列に戻すことができる暗号化のこと 不可逆暗号化:可逆とは逆に、一度暗号化した文字列を元の文字列に        戻すことができない暗号化のこと よって、Crypt関数は、不可逆暗号化を用いているわけですが、もう一つ 問題があります。それは、使用しているOSなどによって、同じCrypt関数、 パスワード、saltを用いても、異なる結果が出てくるということです。 従って、フリーのCGIなどで、あらかじめ設定されているパスワードを 入力しても、管理者モードに入れないことなどがあります。気をつけましょう。 #事実、私の作ったものは、いつもそう・・・(爆) #おかげで、一緒にパスワードの暗号化をしてくれるCGIも一緒につけています。 #そうすれば、テキスト部分を書き換えるだけでいいですからね。 それと同じような使い方として、化学の実験などでも使用します。 可逆変化:化学反応のうち、どちらの方向にも反応が起こり得るもの      例)銀+酸素<->酸化銀 不可逆変化:化学反応のうち、片方の方向にしか反応が起こり得ないもの      例)核分裂など 以上です。 間違いがありましたらご指摘ください。 ではでは☆

参考URL:
質問とは違うけど・・・ちょこっといい話・・・かな?
すると、全ての回答が全文表示されます。
noname#9414
noname#9414
回答No.3

全然話題には関係ありませんが、ichigo様の仰っている暗号化で 使用する名前を・・・ 可逆暗号化:元々あった文字列を暗号化したら、また何かしらの関数を       使用して元の文字列に戻すことができる暗号化のこと 不可逆暗号化:可逆とは逆に、一度暗号化した文字列を元の文字列に        戻すことができない暗号化のこと よって、Crypt関数は、不可逆暗号化を用いているわけですが、もう一つ 問題があります。それは、使用しているOSなどによって、同じCrypt関数、 パスワード、saltを用いても、異なる結果が出てくるということです。 従って、フリーのCGIなどで、あらかじめ設定されているパスワードを 入力しても、管理者モードに入れないことなどがあります。気をつけましょう。 #事実、私の作ったものは、いつもそう・・・(爆) #おかげで、一緒にパスワードの暗号化をしてくれるCGIも一緒につけています。 #そうすれば、テキスト部分を書き換えるだけでいいですからね。 それと同じような使い方として、化学の実験などでも使用します。 可逆変化:化学反応のうち、どちらの方向にも反応が起こり得るもの      例)銀+酸素<->酸化銀 不可逆変化:化学反応のうち、片方の方向にしか反応が起こり得ないもの      例)核分裂など 以上です。 間違いがありましたらご指摘ください。 ではでは☆

参考URL:
質問とは違うけど・・・ちょこっといい話・・・かな?
すると、全ての回答が全文表示されます。
  • ichigo
  • ベストアンサー率50% (1/2)
回答No.2

簡単なプログラムを作って動かしてみるとわかりますが、 確かに$aaaと$bbbは同一の値になります。 --------------------ここから-------------------- ファイル名:cript.pl #!/usr/local/bin/perl my $aaa = crypt('aiu','eo'); my $bbb = crypt('aiu',$aaa); print "\$aaa = $aaa\n"; print "\$bbb = $bbb\n"; --------------------ここまで-------------------- --------------------ここから-------------------- 結果 % ./cript.pl $aaa = eokcsQLdW5n8Y $bbb = eokcsQLdW5n8Y --------------------ここまで-------------------- --ここから説明-- crypt関数はあらかじめ設定されているパスワードの照合などにつかいます。 cryptした文字をファイルに保存しておけば、 他の人にこのファイルを見られた場合でも安全です。 本に書いてあった文章は実はcryptの例としては あまりわかりやすい物ではありません。 こうするとわかりやすいと思います。 --------------------------------------------------------- あなたのパスワードが yourpasswdの場合 my $aaa = cript('yourpasswd','eo'); #$aaaをファイルに保存しておく。 #パスワードを照合する my $bbb = cript('いま入力したパスワード',$aaa); if($aaa eq $bbb){ print "パスワードが一致しました\n"; }else{ print "パスワードが一致しませんでした\n"; } ------------------------------------------------------- 'eo' の様な文字は、SALTといって、cryptするための 設定文字になります。これは適当で構いませんが SALTが破られるとパスワードも破りやすくなるので、 通常はcryptする都度SALTを変更したりします。 尚、cryptしてできた文字列を元に戻すというのは不可能です。 最初の例で言うと eokcsQLdW5n8Y --> aiu にするということは出来ません。 よくプロバイダで、パスワードを忘れた場合は、 こちらで設定したパスワードを郵送で送ります。 という説明がありますが、 どうして忘れてしまったパスワードを教えてくれないかは、 perlのcryptと同じ様な仕組みがあり、cryptされる前のパスワードは プロバイダ側でもわからないからです。

すると、全ての回答が全文表示されます。
noname#151056
noname#151056
回答No.1

crypt は、入力したパスワードと、saltと呼ばれる2文字からなる文字列を使って 暗号化した文字列を返します。 このとき、返す文字列の先頭2文字はsaltになっているのです。 crypt は第一引数にパスワード、第二引数にsaltを受け取るので、例の $aaa=crypt('aiu','eo'); ならば、$aaaの先頭2文字は eo になっているはずです。確認してみてください。 さらに crypt は第二引数に与えられた文字列の先頭2文字をsaltとみなします。 したがって 第二引数に 'eo' を与えても $aaa を与えても同じ salt になります。 同じパスワードと同じsaltなので、結果も同じというわけです。

すると、全ての回答が全文表示されます。

関連するQ&A