一昔前にバッチファイルを実行する中で、他サーバのアカウントのパスワードを記載する必要があったのですが、さすがに平文で記載するのは良くないという話になりました。どうにか暗号化する方法はないかと色々探したものの見つからず、その時はツールを使用することになりました。
ふと思い出して、今の標準環境ではどうなのかと調べたところ、PowerShellに便利なコマンドレットが存在していました。
Windowsで文字列を暗号化する方法
暗号化には「SecureString」を使用します。「SecureString」を使用すると簡単に文字列を暗号化することができます。
「SecureString」とはパスワード等の機密を保持する必要がある文字列をユーザーに見えないようにしてくれる仕組みです。
「SecureString」を使用して暗号化する
- 暗号化する文字列を「SecureString」に変換し、変数「$Secure」に格納する。
$Secure = ConvertTo-SecureString -AsPlainText -Force [暗号化する文字列]
- 「$Secure」に格納された「SecureString」を暗号化する。
ConvertFrom-SecureString $Secure
表示された内容が暗号化された文字列です。ファイル等に保管する場合はこの暗号化された文字列を保管します。
コマンド実行例)
PS C:\WINDOWS\system32> $Secure= ConvertTo-SecureString -ASPlainText -Force password PS C:\WINDOWS\system32> ConvertFrom-SecureString $Secure 01000000d08c9ddf0115d1118c7a00c04fc297eb01000000883062378ef394409784b89dd0c09f11000000000200000000001066000000010000200000000ed38596d60d4fd3018d8281b366a6c934dc3a9b83ff91531627fbef690613bc000000000e8000000002000020000000eb1c87432443cea7621d776c04d3f47f3dfb5a5ea27e00f7fb20468c37a6e8d9200000005aaad1543f262219440fbf21df0b76d93ca6d4f12bd26703026c34ad18a172a3400000008ad86f947ad7676197a0e6212475ed134e1cf5594420a331bec30bd7b5b3d390227b10aa6233ec5b9d3fa45b7e16d338506fa3f2743aa6dd4e0337f9e1942b75 PS C:\WINDOWS\system32>
暗号化した文字列を使用する
暗号化した文字列を使用する場合は「SecureString」に戻す必要があります。
$Secure= ConvertTo-SecureString [暗号化した文字列]
コマンド実行例)
PS C:\WINDOWS\system32> $Secure= ConvertTo-SecureString 01000000d08c9ddf0115d1118c7a00c04fc297eb01000000883062378ef394409784b89dd0c09f11000000000200000000001066000000010000200000000ed38596d60d4fd3018d8281b366a6c934dc3a9b83ff91531627fbef690613bc000000000e8000000002000020000000eb1c87432443cea7621d776c04d3f47f3dfb5a5ea27e00f7fb20468c37a6e8d9200000005aaad1543f262219440fbf21df0b76d93ca6d4f12bd26703026c34ad18a172a3400000008ad86f947ad7676197a0e6212475ed134e1cf5594420a331bec30bd7b5b3d390227b10aa6233ec5b9d3fa45b7e16d338506fa3f2743aa6dd4e0337f9e1942b75 PS C:\WINDOWS\system32>
これで、変数「$Secure」に「SecureString」として格納されました。
「SecureString」を扱えるコマンドレットに引き渡すのであればこのまま使用できます。
「SecureString」を文字列に変換する
「SecureString」ではなく、平文に戻したい場合もあると思います。以下は、「$Secure」に「SecureString」が格納されている前提のコマンドです。
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Secure) $STR = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($BSTR)
これで、変数「$STR」に最初に入力した「暗号化する文字列」が平文でそのまま格納されます。
まとめ
PowerShellで「SecureString」を使用すると簡単に文字列を暗号化することができます。とりあえず人の目でぱっと見てわからなければ問題ないという場合には使えると思います。
コマンドを知っていれば平文に戻せてしまうという懸念点もありますが、あくまで同じユーザーで使用した場合です。異なるユーザーで「ConvertTo-SecureString [暗号化した文字列]」を使用しても「指定された状態で使用するには無効なキーです。」というエラーが表示され、変換できません。
コメント