Home >
Windows にまつわる e.t.c.
PowerShell で指定サイズのランダムな文字列/バイナリ列を生成する
(旧コンテンツ)
System.Security.Cryptography.RNGCryptoServiceProvider
で書き直しました
新しいコンテンツは
>>こちら<<
パスワード生成するとかでランダムな文字列を 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
Copyright © MURA
All rights reserved.