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

VBScriptでランダムなパスワードを生成するスクリプト

ちょっと所用でランダムなパスワード生成が必要になったので、VBSのスクリプトを作成しました。
使い方とソースコードを公開します。

本スクリプトにより直接的および間接的障害が生じても一切責任を負いません。
あらかじめご了承ください。
自己責任のもとで本資料をご利用ください。


関連記事

使い方

VBSによるパスワード生成スクリプトの使い方を以下に記します。

  1. ZIPファイルをダウンロードしてください。
    スクリプトをCopy&Pasteしてファイルを作成してもかまいません。(拡張子はvbsにしてください。) ZIPファイルをダウンロードしてください。
     
  2. ZIPファイルを展開すると GeneratePassword.vbs があります。
    これがパスワード生成VBSスクリプトになります。
  3. GeneratePassword.vbs をダブルクリックにて起動します。 パスワードの桁数を入力します。
    デフォルトでは10文字としています。
    キャンセルボタンを押すと終了します。
    01.png
     
  4. 記号を含むかどうかの問い合わせです。
    「はい」「いいえ」を選択してください。
    キャンセルボタンを押すと終了します。
    02.png
     
  5. 記号を含むを選択した場合は、記号の文字数を入力します。
    キャンセルボタンを押すと終了します。
    03.png
     
  6. 何個パスワードを生成するかの問い合わせが表示されます。 キャンセルボタンを押すと終了します。
    04.png
     
  7. 作成が完了すると以下のメッセージボックスが表示されます。
    生成したパスワード文字列はクリップボードにコピーされていますので、他のアプリケーションにPasteしてください。
    05.png
     

パスワード生成 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によるパスワード生成スクリプトの紹介でした。



添付ファイル: fileGenPwd.zip 448件 [詳細] file05.png 373件 [詳細] file04.png 385件 [詳細] file03.png 411件 [詳細] file02.png 389件 [詳細] file01.png 424件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-28 (火) 23:11:24