パスワードの暗号化・復号化

スポンサーリンク

はじめに

パスワードを暗号化、復号化する場合は「ConvertFrom-SecureString」と「ConvertTo-SecureString」コマンドレットを使用します。

環境

OS:Windows10
.Net Framework:4.7
PowerShellのバージョン:5.1.17763.1007

※DPAPIを使用する場合は、同一のPCとユーザーアカウントを使用して下さい。

パスワードを暗号化する

DPAPI

デフォルトでは、DPAPIを使用して暗号化します。

#クリアテキストをSecureStringオブジェクトに変換する
$secure = ConvertTo-SecureString -string "password" -AsPlainText -Force

#SecureStringオブジェクトを暗号化された標準文字列に変換する
$encrypt = ConvertFrom-SecureString -SecureString $secure

#暗号化された標準文字列をテキストファイルに書き出す
$encrypt > c:\temp\encrypted.txt

暗号化された標準文字列です。

PS C:\> $encrypt
01000000d08c9ddf0115d1118c7a00c04fc297eb01000000b9f7ced8a7594b4d86b54083ef26ffa100000000020000000000106600000001000020000000c2b1fe1981b822467d58cdf30fef6e9707a8854a6f9a6d75dfd55b6764b31dac000000000e8000000002000020000000301bedcae52aa8d237ce114b49ba524081681acd1f3ab41b15f18cd5ac4ea47e20000000d444c8c9fd646d16b14c8abc2deb0409bab856ae128b80bdc15ad01de98204f7400000004d5c3f5aa171cf06846efe7032dd35f8354dea93821e630cc7862b12a3dde3d89a7612aba83860ad0f75f0e93d4a1b7eb8abf824297da7fbd4e67f648d595a49

Get-Credentialを使ったやり方もあります。別ウィンドウにユーザー名とパスワードを入力する必要がありますが、こちらの方が簡単ですね。

$Credential = Get-Credential
$Credential.Password | ConvertFrom-SecureString | Set-Content c:\temp\encrypted.txt

AES

keyオプションを使用してAESで暗号化します。

#クリアテキストをSecureStringオブジェクトに変換する。
$secure = ConvertTo-SecureString -string "password" -AsPlainText -Force

#SecureStringオブジェクトを暗号化された標準文字列に変換する。
#今回はkeyに256bitのバイト配列(8bit*32)を設定する。設定できるkey長は128,192,256bit。
$encrypt = ConvertFrom-SecureString -SecureString $secure -Key (1..32)

#暗号化された標準文字列をテキストファイルに書き出す
$encrypt > c:\temp\encrypted.txt

暗号化された標準文字列です。

PS C:\> $encrypt
76492d1116743f0423413b16050a5345MgB8AEsALwArAG8ATwA3AGwALwBrAFUARwBOAGMASwBhADIAegBsAEQAcgA1AFEAPQA9AHwANQA4ADMANwA1ADIANQBhAGUANQBhADQAZQAxAGYANgAzAGYAYQA5AGMAYwA2ADcAZgBlAGUAZQAxAGEAZgA2AGMAMgA5ADEAMAA2ADYAMAAyAGIAZAAxADQAYwA0ADcANAA5ADUAMQBlADAAMwBiAGMAYQBhAGMAMwA4ADgAOAA=

パスワードを復号化する

DPAPI

#暗号化された標準文字列を取得する
$encrypt = Get-Content c:\temp\encrypted.txt

#暗号化された標準文字列をSecureStringオブジェクトに変換する
$secure = ConvertTo-SecureString $encrypt

#SecureStringオブジェクトからパスワードを復号化する
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
$Pass = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)

復号化されたパスワードです。

PS C:\> $pass
password

AES

#暗号化された標準文字列を取得する
$encrypt = Get-Content c:\temp\encrypted.txt

#暗号化された標準文字列をSecureStringオブジェクトに変換する
$secure = ConvertTo-SecureString $encrypt -Key (1..32)

#SecureStringオブジェクトからパスワードを復号化する
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
$Pass = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)

復号化されたパスワードです。

PS C:\> $pass
password