• ベストアンサー

パスワード生成プログラム(JAVA)

JAVAでパスワード生成プログラムを作りたいのですが、 乱数だけだと重複などがあってちゃんとしたものが作れません。 重複がなくて、文字列の長さが同じ(長さはどのくらいでもいい)パスワードを生成できるプログラムを作る上でよいアドバイスがあったら、教えていだたきたいのですが。よろしくお願いします。 また、ソースそのものがあれば、公開して頂けないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • proust
  • ベストアンサー率57% (62/108)
回答No.3

「まったく重複がない」というものは作れませんよね。 N種類の文字をM桁つらねた文字列の種類は 最大でN^M (=NのM乗)通りしかないからです。 個人でちょっとしたページを作っている程度であれば、 参考URLをみてみてはどうでしょう。 なおAPIはこれです↓ http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/security/MessageDigest.html

参考URL:
http://www.ipa.go.jp/security/awareness/vendor/programming/b09_01_main.html

その他の回答 (2)

  • sasadora
  • ベストアンサー率68% (59/86)
回答No.2

前者なんですか、すいません。早とちりで。 でも、前にも書いたとおり私にはパスワードをユニークにする 意味が分かりません。(私が知識不足なのかもしれませんが…。) パスワードだけでユーザーを特定させるんですか? 普通はユーザーIDと、パスワードの2つで認識させるものではないでしょうか? そしてユーザーIDは重複のないユニークなものなので、 この2つのセットで認証すれば、万一同じパスワードが生成されても、 問題ないと思うのですが…。

  • sasadora
  • ベストアンサー率68% (59/86)
回答No.1

重複といっているのは、どういうことでしょう? ・同一のパスワードが生成されることがない? ・同じ文字を2回使うことがない? 別にJavaがどうこうという話ではないと思うのですが、 たぶん後者だと思うので、その前提で書きます。 (前者だとしたら、なんでパスワードがユニークになる必要があるのか 分からない…) こういったロジックはいかがでしょう? 1)パスワードで使用してよい文字列を配列に列挙する。  A,B,C,D,E,F,G,H.... 2)この配列の長さに合わせて、乱数を2つ取得する。  10個の配列なら、0~9までの乱数2つ 3)取得した乱数2つを配列の添字に使用してデータを取り替える。 4) 2),3)の処理を十分な回数繰り返す。 5)パスワードの長さ分、先頭から取り出す→パスワード。 分かりやすく言うと、トランプのように重複のないカードを 十分にシャッフルして、先頭から6枚でも8枚でもとった場合、 ランダムでも重複しませんよね?それと同じです。 パスワードにふさわしくない文字(iとjとか、gとqとか)を 含ませないようにすることも簡単です。

K-Asuka
質問者

補足

回答ありがとうございます。 前者なんですけどね(汗) パスワードを発行するするときにユーザごとに違うものを発行したいんですよ。 乱数だけでは同じパスワードができてしまいますし、 ユーザの情報(電話番号とか)からパスワードを生成する方法があればいいんですけどねぇ・・・悩んでます。

関連するQ&A