- PR -

JAVAでの暗号化について

投稿者投稿内容
hidemaru
常連さん
会議室デビュー日: 2004/03/22
投稿数: 44
投稿日時: 2004-03-23 16:01
びしばしさん、ありがとうございます。
UNIX の crypt関数については、見てみましたが、
今、使っているのは、PHPでのcrypt()関数なんです。
暗号化としては、同じなのですが、PHPのcrypt()関数は、
暗号化だけで、復合化が出来ない関数です。
ここに、PHPのマニュアルがありますから参考にして下さい。
http://jp2.php.net/manual/ja/function.crypt.php

それで、これと同じ暗号化を行うものを、模索しているのですが、
見つからないのです。
プログラム上で、データベースに保存してある、暗号化されたパスワードと、
入力したパスワードを暗号化して、両者を比較するという方法で、
パスワードチェックを行っています。

やはり、MD5でハッシュする方法にPHPも変更して、
PHPとJAVAを両立させないといけないのでしょうか?
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2004-03-23 16:41
引用:

それで、これと同じ暗号化を行うものを、模索しているのですが、
見つからないのです。
プログラム上で、データベースに保存してある、暗号化されたパスワードと、
入力したパスワードを暗号化して、両者を比較するという方法で、
パスワードチェックを行っています。

やはり、MD5でハッシュする方法にPHPも変更して、
PHPとJAVAを両立させないといけないのでしょうか?



PHPとJavaの2つの入り口から、同一のDBを参照してユーザー確認を行いたい……というような要件ですよね?
#で、元々はPHPのものが稼動していたために動作を合わせたい……と。

そして、ダイジェスト(非可逆変換)を使用してパスワード格納・参照を行うことで、システムの安全性を高めるというポリシーですね。

確かに用意されているものを使うのが便利(で確実)な場合が多いのですが、このような場合はダイジェスト部分のロジックはご自分で記述なさった方がいいと思います。
#車輪の再発明みたくなことになっても

理由としては、「細かい検証を行うくらいなら自分で記述した方が早そうだから」と、身も蓋もないものになってしまうのですが……関数自作方式にしておけば、例えばこれに「入り口としてPerlも追加」等となっても大丈夫(のハズ)です。
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2004-03-23 16:49
引用:

hidemaruさんの書き込み (2004-03-23 16:01) より:
UNIX の crypt関数については、見てみましたが、
今、使っているのは、PHPでのcrypt()関数なんです。
暗号化としては、同じなのですが、PHPのcrypt()関数は、
暗号化だけで、復合化が出来ない関数です。
ここに、PHPのマニュアルがありますから参考にして下さい。
http://jp2.php.net/manual/ja/function.crypt.php



ご紹介のページにはっきりと

引用:

crypt()は、Unix 標準の DES 暗号を使って文字列を暗号化します。引数には暗号化したい文字列を指 定し、オプションで暗号化のベースとなる 2 文字の'salt' 文字列を指 定します。暗号化に関する関数の詳細は Unix man ページを参照してく ださい。



とありますよ。

引用:

プログラム上で、データベースに保存してある、暗号化されたパスワードと、
入力したパスワードを暗号化して、両者を比較するという方法で、
パスワードチェックを行っています。



データベースに保存してある暗号化されたパスワードの頭 2文字が salt ですから、それを利用して入力文字列を暗号化してください。そうすれば同じ文字列が得られます。

最初に書いたとおり、google で「UNIX crypt java」で検索してくださいよ。最初に「Java Implementations of Unix Crypt」というまとめページが見つかりますから。
http://www.dynamic.net.au/christos/crypt/

# ここまで書かないとダメだとは。

ご存じのとおり crypt は有効文字数が短いので MD5 に置き換えるという案には賛成です。
hidemaru
常連さん
会議室デビュー日: 2004/03/22
投稿数: 44
投稿日時: 2004-03-23 19:06
びしばしさん。ごめんなさい。
私の書き方が良くなかったようです。
知りたかったのは、これをJAVAでコーディングすると
何を使ってコーディングすればいいのかが、よくわからなかったので、
聞いてみたのです。
UNIXのcrypt()関数を、使って暗号化することは了解しています。
頭2文字を使って暗号化することも了解しています。
まだ、JAVAをやり始めて、時間がたっていないので、
JAVAでのコーディングを見つけることが出来なかったので、
質問させていただきました。

確かに、永井さんのおっしゃる通り、
自分で作ったほうが、確実かもしれません。
検討してみます。ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)