SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

ASP.NETを使ってランダムなパスワードを生成する

ASP.NET 2.0のGeneratePassword()メソッドをASP.NET 1.xで利用する方法

  • このエントリーをはてなブックマークに追加

本稿では、ASP.NETを使った2種類のランダムなパスワードの生成方法を取り上げます。一つは、GUIDを利用して手早くパスワードを生成する方法、もう一つは、Reflectorを使ってASP.NET 2.0のGeneratePassword()メソッドをコピーし、複雑なパスワードを生成する方法です。

  • このエントリーをはてなブックマークに追加

はじめに

 私は現在、あるコンサルティング案件で、ユーザーアカウントを使用するWebサイトに携わっています。このサイトでは、ユーザーアカウントの作成方法が2種類あります。1つはユーザー自身で作成する方法で、この場合、ユーザーは電子メールアドレスとパスワードを入力します。もう1つはユーザーの上司が作成する方法で、この場合、上司はユーザーの電子メールアドレスだけを入力します。すると、サイトがユーザー用にランダムなパスワードを生成し、そのパスワードをユーザーに電子メールで通知します。ユーザーは最初のログイン時に、このランダムなパスワードを変更しなければなりません。

 この方式を実現するためには、ランダムなパスワードを生成するプログラムを書くことが必要でした。そこで、4Guysで"random password"という言葉を検索してみました。残念ながら、ランダムなパスワードの生成について4Guysで見つかった記事はクラシックASP時代の古いものばかりだったので、自分でASP.NETのランダムパスワードジェネレータを書く必要がありました。この必要性については「ASP.NET 2.0's new Membership API」で取り上げられており、実際のところ、ASP.NET 2.0ではMembership.GeneratePassword(length, numberOfNonAlphaNumericCharacters)を呼び出すだけで済みます。

 この記事では、ASP.NET用のランダムパスワードジェネレータについて紹介します。ランダムなパスワードを生成するにはいろいろなテクニックがあり、これらのテクニックについてソースコードを示しながら解説します。それでは始めましょう。

GUIDを使った手っ取り早いランダムなパスワードの生成

 ASP.NETを使ってランダムなパスワードを生成する最も簡単な方法は、GUIDの一部を取得することです。GUIDとはGlobally Unique ID(世界で唯一のID)のことで、1つのメソッド呼び出しですぐに生成できる128ビットの数値です。これを使えば、ランダムなパスワードとして使える16進数の文字列を生成することができます。GUIDを新たに生成するには、System.Guid構造体のNewGuid()メソッドを使用します。生成したGUIDは.ToString()メソッドを使って文字列に変換することができます。サンプルコードを以下に示します。

' VB.NET
Dim guidResult as String = System.Guid.NewGuid().ToString()
// C#
string guidResult = System.Guid.NewGuid().ToString();

 このコードを実行するたびに新しいGUIDが生成されます。以下はこのコードを5回実行した場合の結果です。

2fedf13b-8f3d-4c6c-9e36-14885736ed92
bf24060b-0698-4bce-9d0f-c37df2d24508
99931723-a1b6-44be-b4b1-8826dd6f8ceb
5f509578-e1ef-41f2-b3ea-d94caffdcd0e
b4e7b807-09a8-4c77-bbfe-28b31f2093dc

 私は通常、ハイフン(-)を取り除いてGUIDの最初のn文字を取得します。このテクニックを一般の用途に使えるように、GetRandomPasswordUsingGUID(length)というメソッドを作ってみましょう。このメソッドでは、ランダムなパスワードの長さを入力し、GUIDの最初のlength文字(ハイフンを除く)を返します。

' VB.NET
Public Function GetRandomPasswordUsingGUID(ByVal length as Integer) _
  as String  

  'Get the GUID
  Dim guidResult as String = System.Guid.NewGuid().ToString()
  
  'Remove the hyphens
  guidResult = guidResult.Replace("-", String.Empty)
  
  'Make sure length is valid
  If length <= 0 OrElse length > guidResult.Length Then
    Throw New ArgumentException( _
      "Length must be between 1 and " & guidResult.Length)
  End If
  
  'Return the first length bytes
  Return guidResult.Substring(0, length)
End Function
// C#
public string GetRandomPasswordUsingGUID(int length)
{
  // Get the GUID
  string guidResult = System.Guid.NewGuid().ToString();
  
  // Remove the hyphens
  guidResult = guidResult.Replace("-", string.Empty);
  
  // Make sure length is valid
  if (length <= 0 || length > guidResult.Length)
    throw new ArgumentException(
      "Length must be between 1 and " + guidResult.Length);
  
  // Return the first length bytes
  return guidResult.Substring(0, length);

 以下はlengthの値をそれぞれ51015にしてこのメソッドを呼び出した結果です。

Random password of length 5:ce7e9
Random password of length 10: 578562009e
Random password of length 15: 7b0fc1bc9ea9486

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
さらに強力なランダムパスワードジェネレータ

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Scott Mitchell(Scott Mitchell)

http://www.4guysfromrolla.com/ScottMitchell.shtml

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/238 2006/04/11 19:03

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング