VBScriptでランダムなパスワードを生成するスクリプト †ちょっと所用でランダムなパスワード生成が必要になったので、VBSのスクリプトを作成しました。 本スクリプトにより直接的および間接的障害が生じても一切責任を負いません。 関連記事 †使い方 †VBSによるパスワード生成スクリプトの使い方を以下に記します。
パスワード生成 VBS スクリプト †パスワードに半角スペースを含ませたくない場合は、SYMBOL_CHARACTERS変数から半角スペースを削除してください。 ' 初期値 WINDOW_TITLE = "パスワード生成" ' ウインドウタイトル DEFAULT_PASSWORD_LENGTH = 10 ' パスワード桁数 DEFAULT_GENERATE_NUMBER_OF_PASSWORD = 1 ' 生成するパスワードの個数 M_ENTER_NUMBER_OF_DIGITS_PASSWORD = "生成するパスワードの桁数を入力してください。" M_IS_INCLUDE_SYMBOLS = "記号を含みますか?" M_ENTER_NUMBER_OF_DIGITS_SYMBOL = "生成するパスワード内に出現する記号数を入力してください。" M_HOW_MANY_GENERATE = "何個のパスワードを生成しますか?" M_GENERATED_PASSWORD = "パスワードが生成されました。" & vbCrLf & vbCrLf &_ "※クリップボードにコピーしてあります。※" & vbCrLf & vbCrLf &_ "生成したパスワードは以下の通りです。" & vbCrLf E_INVALID_VALUE_MESSAGE = "入力された値に誤りがあります。" E_MAX_NUMBER_OF_DIGITS_EXCEEDED_MESSAGE = "最大桁数を超えています。" E_NOT_INTEGER = "整数で入力してください。" ALPHAMERIC_CHARACTERS = "0123456789BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" SYMBOL_CHARACTERS = "' !""#$%&'()*+,-./:;<=>?@A[\]^_`{|}~" ' Program Body START --> nPwdMaxLen = EnterPasswordLength() bIsSymbols = IsIncludeSymbols() nSymbolLen = 0 If bIsSymbols = vbYes Then nSymbolLen = EnterSymbolLength(nPwdMaxLen) End If nGenPwdCnt = HowManyPassword() ' 生成数分ループ szShuffle = "" For j = 1 To nGenPwdCnt ' 生成分ループ szSym = "" szAlphameric = "" If bIsSymbols = vbYes Then szSym = GetSymbols(nSymbolLen) End If szAlphameric = GetRandomAlphameric(nPwdMaxLen - nSymbolLen) ' シャッフルする szShuffle = szShuffle & Shuffle(szSym & szAlphameric) & vbCrLf Next 'WScript.Echo szShuffle ' クリップボードにコピー PutClipboard szShuffle MsgBox M_GENERATED_PASSWORD & vbCrLf & szShuffle, vbInformation, WINDOW_TITLE ' <-- Program Body End ' Function : GetSymbols ' ランダムで記号を指定数分取得する Function Shuffle(str) ReDim pwdAry(Len(str)) For i = 1 To Len(str) ' 配列に展開 pwdAry(i-1) = Mid(str,i,1) Next ' シャッフル For i = 0 To (UBound(pwdAry) -1) Randomize r = Int((UBound(pwdAry)-1) * Rnd) save = pwdAry(i) pwdAry(i) = pwdAry(r) pwdAry(r) = save Next ' 文字列に戻す szShfl = "" For i = 0 To (UBound(pwdAry) -1) szShfl = szShfl & pwdAry(i) Next Shuffle = szShfl End Function ' Function : GetSymbols ' ランダムで記号を指定数分取得する Function GetSymbols(l) sz = "" For i = 1 To l Randomize s = CInt((Len(SYMBOL_CHARACTERS)-1) * Rnd) c = Mid(SYMBOL_CHARACTERS, s+1, 1) sz = sz & c Next GetSymbols = sz End Function ' Function : GetRandomAlphameric ' ランダムで英数字を指定数分取得する Function GetRandomAlphameric(l) sz = "" For i = 1 To l Randomize s = CInt((Len(ALPHAMERIC_CHARACTERS)-1) * Rnd) c = Mid(ALPHAMERIC_CHARACTERS, s+1, 1) sz = sz & c Next GetRandomAlphameric = sz End Function ' Function : EnterPasswordLength ' 生成するパスワードの桁数入力関数 Function EnterPasswordLength() msg = M_ENTER_NUMBER_OF_DIGITS_PASSWORD pwdlen = DEFAULT_PASSWORD_LENGTH Do While True n = InputBox(msg, WINDOW_TITLE,pwdlen) If n = False Then ' Click Cancel Butotn WScript.Quit End If If IsNumeric(n) Then If IsInteger(n) Then n = CInt(n) If n <= 0 Then msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_PASSWORD Else Exit Do End If Else msg = E_NOT_INTEGER & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_PASSWORD End If Else msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_PASSWORD End If pwdLen = "" Loop EnterPasswordLength = n End Function ' Function : EnterPasswordLength ' 記号を含むかどうか問い合わせる関数 Function IsIncludeSymbols() yesno = MsgBox(M_IS_INCLUDE_SYMBOLS, vbYesNoCancel + vbQuestion, WINDOW_TITLE) If yesno = vbCancel Then WScript.Quit End If IsIncludeSymbols = yesno End Function ' Function : EnterSymbolLength ' 記号を含むかどうか問い合わせる関数 Function EnterSymbolLength(nMaxLen) msg = M_ENTER_NUMBER_OF_DIGITS_SYMBOL Do While True n = InputBox(msg, WINDOW_TITLE) If n = False Then ' Click Cancel Butotn WScript.Quit End If If IsNumeric(n) Then If IsInteger(n) Then n = CInt(n) If nMaxLen < n Then msg = E_MAX_NUMBER_OF_DIGITS_EXCEEDED_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_SYMBOL Else If n <= 0 Then msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_SYMBOL Else Exit Do End If End If Else msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_PASSWORD End If Else msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_SYMBOL End If Loop EnterSymbolLength = n End Function ' Function : HowManyPassword ' 記号を含むかどうか問い合わせる関数 Function HowManyPassword() msg = M_HOW_MANY_GENERATE count = DEFAULT_GENERATE_NUMBER_OF_PASSWORD Do While True n = InputBox(msg, WINDOW_TITLE,count) If n = False Then ' Click Cancel Butotn WScript.Quit End If If IsNumeric(n) Then If IsInteger(n) Then n = CInt(n) If n <= 0 Then msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_HOW_MANY_GENERATE Else Exit Do End If Else msg = E_INVALID_VALUE_MESSAGE & vbCrLf & M_HOW_MANY_GENERATE End If Else msg = E_NOT_INTEGER & vbCrLf & M_ENTER_NUMBER_OF_DIGITS_SYMBOL End If Loop HowManyPassword = n End Function ' Function : IsInteger ' 整数? Function IsInteger(v) d = CDbl(v) i = CInt(v) r = False If d = i Then r = True End If IsInteger = r End Function ' Function : PutClipboard(str) ' クリップボードにセットする Sub PutClipboard(str) Set o = CreateObject("WScript.Shell") o.Exec("clip").StdIn.Write str Set o = Nothing End Sub 以上、VBScriptによるパスワード生成スクリプトの紹介でした。 |