Home > Windows にまつわる e.t.c.

PowerShell で指定サイズのランダムな文字列/バイナリ列を生成する


パスワード生成するとかでランダムな文字列を PowerShell で作るには以下のようにします。
(GeneratePassword の 128 文字制限を超えられるように while で回しています)

##################################################
# ランダム文字列生成
#   アルファベット大文字/小文字、数字、記号
##################################################
function CreateRandomString( $ByteSize ){

    # アセンブリロード
    Add-type -AssemblyName System.Web

    if( $ByteSize -le 128 ){
        # 1/5 以上の記号を含むランダム文字列生成
        [int]$MarkLength = $ByteSize / 5
        $RetrunString = [System.Web.Security.Membership]::GeneratePassword($ByteSize, $MarkLength)
    }
    else{
        # 必要文字数になるまでランダム文字生成
        do {
            # 記号26文字(1/5)以上含む128文字のランダムな文字列を生成
            $RandomString += [System.Web.Security.Membership]::GeneratePassword(128, 26)

        } while ($RandomString.Length -le $ByteSize)
        # 指定文字数にする
        $RetrunString = $RandomString.Substring(0, $ByteSize)
    }
    return $RetrunString
}

##################################################
# ランダム文字列生成
#   アルファベット大文字/小文字、数字(記号除く)
##################################################
function CreateRandomStringAlphabetNumeric( $ByteSize ){

    # アセンブリロード
    Add-type -AssemblyName System.Web

    # 必要文字数になるまでランダム文字生成
    do {
        # 128文字のランダムな文字列を生成
        $RandomString = [System.Web.Security.Membership]::GeneratePassword(128, 0)

        # 記号を取り除く
        $SelectString += $RandomString | % {$_ -replace "[^a-z0-9]",""}
    } while ($SelectString.Length -le $ByteSize)

    # 指定文字数にする
    $RetrunString = $SelectString.Substring(0, $ByteSize)

    return $RetrunString
}

##################################################
# ランダム文字列生成
#   数字のみ
##################################################
function CreateRandomStringNumeric( $ByteSize ){

    # アセンブリロード
    Add-type -AssemblyName System.Web

    # 必要文字数になるまでランダム文字生成
    do {
        # 128文字のランダムな文字列を生成
        $RandomString = [System.Web.Security.Membership]::GeneratePassword(128, 0)

        # アルファベットと記号を取り除く
        $SelectString += $RandomString | % {$_ -replace "[^0-9]",""}
    } while ($SelectString.Length -le $ByteSize)

    # 指定文字数にする
    $RetrunString = $SelectString.Substring(0, $ByteSize)

    return $RetrunString
}

 

暗号とかのセッションキーで使う場合、ランダム文字列だと印字可能キャラクターにしかならないので本当の意味でのランダム値にはなりません。

そんな場合は、こいつを使います(byte配列が戻り値)

##################################################
# セッション鍵生成
##################################################
function CreateRandomKey( $BitSize ){
    if( ($BitSize % 8) -ne 0 ){
        echo "Key size Error"
        return $null
    }
    # アセンブリロード
    Add-Type -AssemblyName System.Security

    # バイト数にする
    $ByteSize = $BitSize / 8

    # 入れ物作成
    $KeyBytes = New-Object byte[] $ByteSize

    # オブジェクト 作成
    $RNG = New-Object System.Security.Cryptography.RNGCryptoServiceProvider

    # 鍵サイズ分の乱数を生成
    $RNG.GetNonZeroBytes($KeyBytes)

    # オブジェクト削除
    $RNG.Dispose()

    return $KeyBytes
}

 

関連情報

関数を PowerShell プロンプトで実行する
http://www.vwnet.jp/Windows/PowerShell/2016100401/UseFunctionInPsPrompt.htm

AES 256 の PowerShell 実装
http://www.vwnet.jp/Windows/PowerShell/AES.htm

SHA-2(SHA256) の PowerShell 実装
http://www.vwnet.jp/Windows/PowerShell/SHA256.htm

RSA 公開鍵暗号の PowerShell 実装
http://www.vwnet.jp/Windows/PowerShell/RSACrypto.htm

RSA 電子署名(SHA256)の PowerShell 実装
http://www.vwnet.jp/Windows/PowerShell/RSASignature.htm

PowerShell で公開鍵方式暗号ファイルを交換をする
http://www.vwnet.jp/Windows/PowerShell/PublicKeyCrypto.htm

PowerShell スクリプト引数(Param)の Tips
http://www.vwnet.jp/Windows/PowerShell/Param.htm

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.