C♯相談室 Part28
■ このスレッドは過去ログ倉庫に格納されています
0628初心者
2006/01/14(土) 09:30:41文字列からパスワード文字列を作成する手順としては、
テキストボックスにテキスト入力
↓
そのテキストを System.Text.Encoding.Unicode.GetBytes でバイト列に変換
↓
そのバイト列を MD5 の ComputeHash の引数にしてハッシュ
↓
ハッシュコードを int 型に収まるように加工する
↓
それをシードにして Random 型のインスタンスを生成
↓
その擬似乱数を基に、指定された条件(大文字、小文字、数字、記号、文字数)に従って文字列作成
↓
ウマー
ってな感じです。
ここで問題となるのは、ハッシュコードを int 型に収まるように加工する部分です。
せっかく MD5 で 128bit もの一意な値を取得しているのに、
Random のシードにするために 32bit にサイズを落とさなければならない訳です。
32bit ってことは、最大でも約 43 億通りのシードしか用意できないことになります。
すると、文字数などの条件によってもある程度は変わってくると思いますが、
何百兆回とか何千兆回とか総当りすれば、あっさりと破られてしまうことになります。
そこで質問なんですが、Random と同じ効果の得られて、
long 型の値をシードにできるクラスとかメソッドとかってないですかね?
シードが long 型になれば、最大通り数も天文学的な数値にまで跳ね上がります。
そうなれば、よほどのことがなければ破られない強固なパスワード文字列が生成できます。
すばらしいと思いませんか?
■ このスレッドは過去ログ倉庫に格納されています