アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

重複といっているのは、どういうことでしょう?


・同一のパスワードが生成されることがない?
・同じ文字を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とか)を
含ませないようにすることも簡単です。

この回答への補足

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

補足日時:2002/11/01 23:23
    • good
    • 0

前者なんですか、すいません。

早とちりで。

でも、前にも書いたとおり私にはパスワードをユニークにする
意味が分かりません。(私が知識不足なのかもしれませんが…。)

パスワードだけでユーザーを特定させるんですか?
普通はユーザーIDと、パスワードの2つで認識させるものではないでしょうか?
そしてユーザーIDは重複のないユニークなものなので、
この2つのセットで認証すれば、万一同じパスワードが生成されても、
問題ないと思うのですが…。
    • good
    • 0

「まったく重複がない」というものは作れませんよね。


N種類の文字をM桁つらねた文字列の種類は
最大でN^M (=NのM乗)通りしかないからです。

個人でちょっとしたページを作っている程度であれば、
参考URLをみてみてはどうでしょう。
なおAPIはこれです↓
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java …

参考URL:http://www.ipa.go.jp/security/awareness/vendor/p …
    • good
    • 0

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