Home >
Windows にまつわる e.t.c.
PowerShell で指定サイズのランダムな文字列/バイナリ列を生成する
パスワード生成するとかでランダムな文字列を PowerShell で作るには以下のようにします。
(PowerShell 6.0(正確には .NET Core 2.0) で System.Web.Security
がサポートされなくなったので、System.Security.Cryptography.RNGCryptoServiceProvider で書き直しました。書き直し前のコンテンツはこちら)
##################################################
# ランダム文字列生成
##################################################
function CreateRandomString(
[int]$ByteSize, # 生成する文字数
[switch]$RejectExtendMark, # 拡張記号を除く
[switch]$RejectBaseMark, # 基本記号を除く
[switch]$RejectAlphabet # アルファベットを除く
){
# アセンブリロード
Add-Type -AssemblyName System.Security
# ランダム文字列にセットする値
$BaseString = '1234567890'
$Alphabet = 'ABCDEFGHIJKLNMOPQRSTUVWXYZabcdefghijklnmopqrstuvwxyz'
$BaseMark = '!.?+$%#&*=@'
$ExtendMark = "'`"``()-^~\|[]{};:<>,/_"
# アルファベット
if( $RejectAlphabet -ne $true ){
$BaseString += $Alphabet
}
# 拡張記号
if( $RejectExtendMark -ne $true ){
$BaseString += $ExtendMark
}
# 基本記号
if( $RejectBaseMark -ne $true ){
$BaseString += $BaseMark
}
# 乱数格納配列
[array]$RandomValue = New-Object byte[] $ByteSize
# オブジェクト 作成
$RNG = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
# 乱数の生成
$RNG.GetBytes($RandomValue)
# 乱数を文字列に変換
$ReturnString = ""
$Max = $BaseString.Length
for($i = 0; $i -lt $ByteSize; $i++){
$ReturnString += $BaseString[($RandomValue[$i] % $Max)]
}
# オブジェクト削除
$RNG.Dispose()
return $ReturnString
}
|
スクリプトにして GitHub に公開しましたので、Clone するか Invoke-WebRequest してください。
MuraAtVwnet/CreateRandomString: パスワード作成スクリプト
https://github.com/MuraAtVwnet/CreateRandomString
git@github.com:MuraAtVwnet/CreateRandomString.git
Invoke-WebRequest
https://raw.githubusercontent.com/MuraAtVwnet/CreateRandomString/master/CreateRandomString.ps1
-OutFile ~\CreateRandomString.ps1 |
暗号とかのセッションキーで使う場合、ランダム文字列だと印字可能キャラクターにしかならないので本当の意味でのランダム値にはなりません。
そんな場合は、乱数そのものを使います(byte配列が戻り値)
##################################################
# セッション鍵生成
##################################################
function CreateRandomKey( [int]$BitSize ){
if( ($BitSize % 8) -ne 0 ){
echo "Key size Error"
return $null
}
# アセンブリロード
Add-Type -AssemblyName System.Security
# バイト数にする
$ByteSize = $BitSize / 8
# 乱数格納配列
[array]$KeyBytes = New-Object byte[] $ByteSize
# オブジェクト 作成
$RNG = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
# 鍵サイズ分の乱数を生成
$RNG.GetBytes($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.