JavaScriptを有効にしてください

【Powershell】SecureStringの暗号化・復号化

 ·  ☕ 2 分で読めます
Photo by Pixabay from Pexels

Photo by Pixabay from Pexels

Windowsで自動化を考えるとき、
やっぱりPowershellが圧倒的に安定みたい。

Powershellでなんでもできる

Powershellで認証

で、Powershellで認証を扱うときには
クレデンシャルオブジェクトを作って使いますね。
ユーザー名とパスワードを含むオブジェクトです。

$password = ConvertTo-SecureString "Password" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PsCredential "UserName",$password

クレデンシャルの引数として渡すパスワードは、SecureStringオブジェクトです。

で自動化するときには、configファイルなどからパスワードを読み込んでSecureStringにするわけですが、平文でパスワードを保存するのはセキュアじゃない。
ということで、暗号化したパスワードを保存しておく方法があります。

SecureString → 暗号化パスワードテキスト

# keyを明示的に指定しない場合
# コマンドを実行するユーザーと紐づく = 同じユーザーのみ復号化可能
$encrypted = ConvertFrom-SecureString -SecureString $password

# keyを明示的にしてする場合 (任意の配列)
# 復号化するときに同じkeyを指定する
$encrypted = ConvertFrom-SecureString -SecureString $password -key (1..10)

暗号化平文パスワード → SecureString

# keyを明示的に指定しない場合
# 暗号化したときと同じユーザーのみ復号化可能
$password = ConvertTo-SecureString $encrypted

# keyを明示的に指定する場合
$password = ConvertTo-SecureString $encrypted -key (1..10)

SecureString → 平文パスワード

これはひと手間

$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($importSecureString)
$StringPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)

参考

GitHub - senkousya/usingEncryptedStandardStringOnPowershell: 🔰Windows PowerShellで文字列の暗号化と復号化

共有