• 締切済み
  • 暇なときにでも

crypt

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

共感・応援の気持ちを伝えよう!

  • Perl
  • 回答数4
  • 閲覧数532
  • ありがとう数7

みんなの回答

  • 回答No.4
noname#9414
noname#9414

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

参考URL:
質問とは違うけど・・・ちょこっといい話・・・かな?

共感・感謝の気持ちを伝えよう!

  • 回答No.3
noname#9414
noname#9414

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

参考URL:
質問とは違うけど・・・ちょこっといい話・・・かな?

共感・感謝の気持ちを伝えよう!

  • 回答No.2
  • ichigo
  • ベストアンサー率50% (1/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される前のパスワードは プロバイダ側でもわからないからです。

共感・感謝の気持ちを伝えよう!

  • 回答No.1
noname#151056
noname#151056

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • foreach文で条件式を処理したいのですが、なぜ評価しないのか分からない。

    以下の式で $aaaが$tmpと同じ値が有るのですが、 @Messagesの最後に取得した$_の$aaaしか値が入らず、 $aaaが$tmpにマッチしません。 foreach (@Messages) { ($aaa,$bbb,$ccc) = split(/¥t/,$_,3); if($aaa eq $tmp){ #ここがうまくいかない! push(@NEWS,$_); } } よろしく教えてください。

    • ベストアンサー
    • Perl
  • 多次元配列?配列のキー?変数の型?

    PHP勉強中のものです。 予定通りの動作にならんく四苦八苦しています。 どのように修正すれば予定通りになるのか考え方のアドバイスなどお願いします。 処理したいこと 変数$xxxの先頭の文字と最後の文字をsubstr()で取り出し$aaaと$bbbに別けそれぞれ代入しキーとして多次元配列に代入した配列要素を指定してechoで出力したい 試してみたこと $aaa1と$bbb1に直接整数を代入してみたところ、echoで出力された キーになる変数を整数型として変数に代入してみたが希望通りの動作にならなかった。 なにかアドバイス頂けると助かります。 $array = array( "0" =>array("あいうえお","かきくけこ"), "1" =>array("さしすせそ") ); $xxx = "0-1"; $aaa = substr($xxx,0,1); $bbb = substr($xxx,2); $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない $aaa1 = 0; $bbb1 = 1; echo $array[$aaa1][$bbb1]; //出力された $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない

    • ベストアンサー
    • PHP
  • bashなどのシェル変数の値に改行を含める事は可能でしょうか?

    タイトルの通りですが、通常のシェル変数の値として  [prompt]$ aaa="bbb<改行>ccc" のようなセットを行い、  [prompt]$ echo $aaa  bbb  ccc  [prompt]$ のような結果を得たいのですが、可能でしょうか。

  • split で " または ' で挟まれた部分を一つとして処理するには?

    perl で 文字列を split で処理する時に、" や ' で挟まれた領域を一つの文字列として処理するにはどうやったらよいのでしょうか? たとえば $aaa = "aaa bbb 'c d e' fff"; @aaa = split(/ /, $aaa); だと、 aaa bbb 'c d e' fff となってしまいますが、 aaa bbb 'c d e' fff となるようにするにはどうするのでしょうか?

    • ベストアンサー
    • Perl
  • 【シェル】while文の変数定義について

    OS:Solaris10 sh:Bシェル お世話になります。 シェルの冒頭で定義した変数をwhile文の中で読み込ませたいです。 現状のシェルは下記の通りです。 ---- #!/bin/sh # *** 変数定義 *** AAA1=Spring BBB1=Summer AAA2=Autumn BBB2=Winter # *** メイン処理 *** i=1 while [ $i -le 2 ]; do AAA=AAA$i BBB=BBB$i echo ${AAA} echo ${BBB} i=`expr $i + 1` done ---- しかし、出力される結果は下記のようになってしまいます。 AAA1 BBB1 AAA2 BBB2 これを冒頭の「*** 変数定義 ***」で定義した値を読み込ませ、下記のような出力結果を得たいです。 Spring Summer Autumn Winter どうかご教授ください。

  • マッチしなかった時の値を取り出したい

    perl5.8.5を使っています。 次のような形で$1の値を表示させたいのですが(そのまま$strを表示させれば良いとは思いますが、とりあえず) $str = "aaa"; if ($str !~ /^(bbb|ccc|ddd)/) { print "t=".$1; } これだと$1に値が入ってきません。 この場合はどのようにすれば$strの「aaa」を取り出すことができるのでしょうか?

    • ベストアンサー
    • Perl
  • Excel 条件に一致したセルの隣のセルを返す

    エクセル初心者です。どうかご指導ください。 シート1の処理1・処理2・処理3に、シート2で一致したコードの隣の値を返したいのですが可能でしょうか? シート1                 シート2 コード 処理1 処理2 処理3   コード  処理名  1   AAA               1   AAA  2   BBB AAA           2   BBB  3   BBB               3   BBB  4   CCC AAA           2   AAA  5                      4   CCC                         4   AAA

  • JAVAのDouble型の小数点以下の値の取扱について

    JAVAのDouble型の小数点以下の値の取扱について JAVA勉強中の超初心者です。 Double aaa = 1.0; Double bbb = 1.1; という値があり、これを最終的にstring型に変換してテキストとして表示しています。 当たり前ですが、aaaなら1.0、bbbなら1.1と表示されます。 でもできれば aaa→1 bbb→1.1 という風に小数点以下が0の場合は表示しないようにしたいのですがどのようにしたらよいか悩んでおります。 単純なことかもしれませんが宜しくお願いします。

    • ベストアンサー
    • Java
  • system関数と引数について

    環境 Windows XP VC++6.0, Win32consoleです。 以下のファイルを連続処理させたいのですが、  aaa1.txt、aaa2.txt、aaa3.txt、~~~~aaa.15.txt  bbb1.txt、bbb2.txt、bbb3.txt、~~~~bbb.15.txt  ccc1.txt、ccc2.txt、ccc3.txt、~~~~ccc.15.txt その際、perlで処理させたいと考えております。 VC++ から system関数を用いてperlファイルを動かそうとしていますが、 たとえば、この時 aaa や bbb や ccc を引数として渡せるのでしょうか?

  • c++のグローバル変数

    お世話になります c++のグローバル変数の使い方を教えていただけないでしょうか Visual Studio 2008を使用しております ------------abc.cpp------------- int AAA; BBB(){ AAA = 1; } abc::CCC(){ AAA = 2; } コンパイル(ビルド)ではエラーは出ないのですが、 BBBをコールした時は変数AAAに値をセットできるのですが、 abc::CCCをコールした時、AAAに値がセットできません、 ウォッチ等も「エラー:識別子'AAA'はスコープ外です」 となってしまいます。 補足 BBBはリンクしているライブラリ(修正不可)からコールされる為、 クラスに組み込む事が出来ません。