検索エンジン等で検索結果のアドレスが暗号化?されていますがどうすればできるのですか?
今回、ユーザーIDとパスワードを入力して検索するページを作成しているのですが、検索結果を複数ページに表示するのにリンクアドレスに引数として渡す方法を使用しています。
パスワードがばれないように暗号化して引数にしたいのですが、解読方法を含めて宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

>検索エンジン等で検索結果のアドレスが暗号化?されていますが



それは暗号化ではなくてURLエンコードというもので、URLで使えない文字をURLで使える文字に変換しているだけなので、セキュリティは全くないですよ。

暗号化をするには、暗号化処理用のモジュールを探すか、自分で作るかですね。
ただ、暗号化が必要な情報をURLに含めるという方法はあまり使われていないと思います。CookieやSSL、HTMLのフォームに埋め込むなど、いろいろ方法はありますので・・・。

URLに丸見えにならなければ良いという程度であれば、パスワードに使用する文字に適当に変換テーブルを設定して変換するようにすれば良いのではないでしょうか。

この回答への補足

回答有り難うございます。
今回の質問は私の記述が間違ってました。
実は、URLエンコードの方法を知りたかったのです。
もし知っていれば教えて頂きたいのですが。
宜しく御願い致します。

補足日時:2001/11/13 10:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qパスワード暗号化について(CGIスクリプト)

 現在記事削除処理の、キー暗号化と解読について勉強しているんですが、他の方が書いたソースを読んでもさっぱり意味不明です。技術評論社さんのリファレンスを参考にしてるんですが、どうも載っていないワザが使われているらしく・・・。

 まずは暗号化処理です(とある有名ソースから抜粋)。

@SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
srand;
$salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))];
$encrypt = crypt($password, $salt) || crypt ($password, '$1$' . $salt);

問題は$encryptなんですが、||演算子は、要するに左オペランドの保険みたいなものなんでしょうか?まず、左オペランドが偽になる、ということ自体が分かりません。結果が偽になる、というのは0を返すということでしょうか?
 crypt関数が処理を失敗する(?)、ということでも偽になるかもしれないんですが、暗号化処理を失敗などということがあるのでしょうか?
 次に、ひとまず左オペランドが偽だった場合ですが、右オペランドに関して、暗号化キーが「$1$xx」の5文字ですよね。暗号化キーは2文字までしか評価されないから、結局これは「$1」と変わらない気がします。というより、まずなぜ「$1$」なんでしょうか?そして、合計5文字の意味は・・・?謎は深まるばかりです。

 質問の長さが800文字を超えてしまうので、前半はここで切らせていただきます。
 後半は「パスワード解読について(CGIスクリプト)」にて質問させていただいています。
 どうかよろしくお願いします。

 現在記事削除処理の、キー暗号化と解読について勉強しているんですが、他の方が書いたソースを読んでもさっぱり意味不明です。技術評論社さんのリファレンスを参考にしてるんですが、どうも載っていないワザが使われているらしく・・・。

 まずは暗号化処理です(とある有名ソースから抜粋)。

@SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
srand;
$salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))];
$encrypt = crypt($password, $salt) || crypt ($password, '$1$' . $salt);

...続きを読む

Aベストアンサー

いや、Perlのバージョンによるものではありません。
簡単に言うと、Perlの関数cryptは、内部でOS付属のライブラリcryptを
呼んでいるのです。そしてそれが返すものをそのまま返しているだけ。

例えばFreeBSDではデフォルトでMD5が使われます。しかしこれも
切りかえることができます。詳しくは知りませんがLinuxのいくつかの
ディストリビューションでもそうらしいですね。

正確には「OSの種類、バージョン、設定による」のです。
よって、Perlを利用するだけのユーザはどちらが使われているのか
調べてそれ用のコードを書くか、あるいはどちらでも大丈夫な
ように書く必要があるわけです。

> DESというアルゴリズムで生成した際には$1$を最初の3文字として解釈してしまうのでは

このコードがDESのときどう動作するか?という話ですか?
ならば先に左オペランドの「crypt($password, $salt)」が真の値を返しますから
「||」の働きによって後半の'$1$'を含むcryptは実行されず、次の行へ進んでしまい
ますので問題ありません。

いや、Perlのバージョンによるものではありません。
簡単に言うと、Perlの関数cryptは、内部でOS付属のライブラリcryptを
呼んでいるのです。そしてそれが返すものをそのまま返しているだけ。

例えばFreeBSDではデフォルトでMD5が使われます。しかしこれも
切りかえることができます。詳しくは知りませんがLinuxのいくつかの
ディストリビューションでもそうらしいですね。

正確には「OSの種類、バージョン、設定による」のです。
よって、Perlを利用するだけのユーザはどちらが使われているのか
調...続きを読む

Q暗号化 復号化

今、簡単な暗号化のプログラムを作っています。

$a = $in{"honbun"};
$b = $in{"pass"};
$c = length($in{"honbun"});

$n = 0;
while ($n < $c){
$k = substr($a,$n,1);
$d = chr(ord($k) + $b);
print "$d";
$n++;
}

pass文だけ、コード値をずらしているのですが、
基準のコード値より大きい数になってしまった場合、
どのように修正してやればよいでしょうか?

Aベストアンサー

No.1 のつづきです。

暗号文字列中に印字不能文字が現れて困るなら、とっても面倒な処理が必要です。 (コード表に無い数値をスキップせにゃなりません) 私は知りませんが、面倒を見てくれるモジュールを探す方が良いでしょう。

出力が暗号バイナリ列で良いなら、 $maxchr を 0xff にしたらどうでしょう?

Perlのバージョンや use してるモジュールによっては binmode(STDOUT) を追加したり、 ord/chr を pack/unpack に変更が必要かも。

Q暗号化(perl)→復号化(php)

暗号化キーを使用した暗号化→復号化で
cgi(perl)で暗号化し、phpで復号化を行おうとしております。
AES暗号を使用したのですが、いろいろ設定を変えて
試みたのですが、うまくいきませんでした。

他に暗号化キーを使用した暗号化の方法がありましたら
教えてください。
暗号化(perl)→復号化(php)で実績のあるモジュールが
あれば非常に助かります。

よろしくお願いします。

Aベストアンサー

http://search.cpan.org/search?query=Crypt&mode=all
/^Crypt::/ なモジュールならば、大体ご期待に添えるのではないでしょうか。
私が知っているのは Crypt::Blowfish と crypt() 関数ぐらいですが――。
http://search.cpan.org/perldoc?Crypt::Blowfish

Qパスワード解読について(CGIスクリプト)

 「パスワード暗号化について(CGIスクリプト)」の続きとなっています。文字数が800文字を超えてしまったため、分割させていただきました。
 続いて解読処理です。こっちは更に謎です。

$salt = $logpassword =~ /^\$1\$(.*)\$/ && $1 || substr($logpassword, 0, 2);

 最初は//内の処理です。$1$だけは読めますが、「^」も「(.*)」も最後の$も不明です。「^」はEXORではありませんよね・・・?
 次に&&とやはり||です。この辺は「え?ギャグ?」って感じです(まったく分かってません)。
 最後にパターン結合演算子ですが・・・。「スカラー式をm//、s///、tr///と結びつける」と言われても何のことやら。大体上の表記ではmもsもtrも使ってないんで・・・。マッチmの略形でしょうか?

 ということで長くなってしまいましたが、これらの動作の目的、そして動作原理を教えていただきたく質問させていただきました。
 どうかよろしくお願いします。

Aベストアンサー

こちらこそよろしくお願いします。
正規表現に付いては、それこそ一冊の本にもなっているくらいなので、あとで
じっくりラクダ本やその「詳説 正規表現」(http://www.oreilly.co.jp/BOOK/regex/)
をご覧いただくといいと思いますが、とりあえず簡単に補足しておきます。

まず「^」ですが、これは「頭から評価していく」という意味ではありません。
「n文字目から…」の方が正解です。

$a = 'Perl is not a Pearl';
$b = 'What is Perl?';
のとき、
$a = /^Perl/; は先頭がPerlで始まるので真
$b = /^Perl/; は先頭がWhatで始まるので偽
$a = /Perl/; はPerlを含むので真
$b = /Perl/; もPerlを含むので真
となります。

「.*」は0回でも一致します。/Pe.*rl/ はPerlにもPearlにもマッチします。
1回以上必ずなにかないといけない場合は/Pe.+rl/と「+」を使います。
上の例で言うとこの正規表現は$aでは真、$bでは偽になります。

さて、「()」は実際のカッコを指しているのではないことにご注意ください。
'This is (not) Perl' =~ /(.*)/ も真ですし、'This is not Perl' =~ /(.*)/
も真です。本来の「()」にマッチさせたければ\を使って /\(.*\)/とします。

ただの「()」は「カッコの中のマッチした文字列をこっそり$1に突っ込んでお
いてください」という意味です。$1の1は、カッコの登場順の番号を表します。
例えば
$date = '2001/5/11 21:25:30';
$date =~ m/^(\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+)/;
とすると、$1に「2001」が、$2に「5」が、$3に「11」が…$6に「30」が入り
ます。

なお、「\d」は数字を表す記号です。また「/」はそのまま書くと
m//のスラッシュと区別がつかなくなるので「\/」としてあります。これを
避けるためm//を「/」ではない任意の文字で囲む方法もあります。
$date =~ m@^(\d+)/(\d+)/(\d+) (\d+):(\d+):(\d+)@;
これだと@が区切りになるので「/」はそのままでよくなります。このときは
「m」は省略できません(なんか余計な説明加えちゃってかえって混乱させ
ちゃったかな…)。

> (@log = <IN>;とかforeach(0 .. $#data){}とか)

foreachのかわりにmap {} @data; を使うことを覚えたりするとさらにクセに
なりますよ。

こちらこそよろしくお願いします。
正規表現に付いては、それこそ一冊の本にもなっているくらいなので、あとで
じっくりラクダ本やその「詳説 正規表現」(http://www.oreilly.co.jp/BOOK/regex/)
をご覧いただくといいと思いますが、とりあえず簡単に補足しておきます。

まず「^」ですが、これは「頭から評価していく」という意味ではありません。
「n文字目から…」の方が正解です。

$a = 'Perl is not a Pearl';
$b = 'What is Perl?';
のとき、
$a = /^Perl/; は先頭がPerlで始まるので真
$b = /...続きを読む

Q文字列検索のAND条件を引数にしたい

Perl初心者です。
指定したファイルの中から指定した文字列の入っている行を取得したいのですが、
open(FL, $ARGV[0]);
while (<FL>) {
if ($_ =~ /$ARGV[1]/) { print $_; }
} close(FL);
としたとき、
$ARGV[1]に aaa/bbb/ccc と入れてaaaかつbbbかつcccを含む行としたいのですが、うまく動作しません。
このような場合がGREPとかのコマンドを使ったほうがよいのでしょうか?
別の処理も組み込みたいので、できればperlで書きたいのですが、正規表現の文字列を引数で与えるようなことはできるのでしょうか?
よろしく御願いします。

Aベストアンサー

正規表現を文字列で与えることはもちろん可能ですが, 「aaa, bbb, ccc を全て含む」というのは (書けないことはないけど面倒なので) やめた方がいいと思います. 素直に && でつなぐ (あるいはもっとひねる) 方が安全です.

ひねった方向でいくと, 例えば $ARGV[1] が "aaa/bbb/ccc" だとして
my @patterns = map { qr/$_/ } split(/\//, $ARGV[1]);
open(FL, $ARGV[0]);
while (my $line = <FL>) {
print $line unless grep { $line !~ $_ } @patterns;
}
close(FL);
でいける... はずです. 試してないけど.


このカテゴリの人気Q&Aランキング

おすすめ情報