PowerShell でセキュア文字列をプレーンテキストに変換する方法
-
PowerShell で
Marshalクラスを使用して Secure String をプレーンテキストに変換する -
PowerShell で
ConvertFrom-SecureStringコマンドレットを使用して Secure String をプレーンテキストに変換する -
PowerShell で
NetworkCredentialクラスを使用して Secure String をプレーンテキストに変換する -
PowerShell で
GetNetworkCredentialメソッドを使用して Secure String をプレーンテキストに変換する - 結論
PowerShell は、メモリ内の機密情報を保護するために設計された SecureString オブジェクトを処理するためのさまざまな方法を提供します。しかし、セキュリティリスクにもかかわらず、SecureString をプレーンテキストに変換する必要があるシナリオもあります。
この記事では、Marshal クラス、ConvertFrom-SecureString コマンドレット、NetworkCredential クラス、GetNetworkCredential() メソッドを使用するなど、この変換を達成するためのさまざまな方法を探ります。各メソッドは、それぞれの利点と考慮事項を提供し、PowerShell スクリプト内での機密データの安全な取り扱いに柔軟性を提供します。
PowerShell で Marshal クラスを使用して Secure String をプレーンテキストに変換する
PowerShell では、[System.Runtime.InteropServices.Marshal] クラスが、アンマネージドコードとの相互運用を促進し、メモリを操作するためのメソッドを提供します。そのメソッドのうち、SecureStringToBSTR と PtrToStringAuto() は、SecureString をプレーンテキストに変換する際に重要な役割を果たします。
例:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$secureStringPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
$plainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr)
$plainText
この例では、まず ConvertTo-SecureString コマンドレットを使用して、パスワード"MyPassword"を含む SecureString オブジェクト $secureString を作成します。次に、[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString) を使用して、SecureString を BSTR(基本文字列)表現に変換します。
最後に、[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr) を使用して、BSTR 表現をプレーンテキストに変換し、$plainText 変数に格納します。
出力:

PowerShell で ConvertFrom-SecureString コマンドレットを使用して Secure String をプレーンテキストに変換する
ConvertFrom-SecureString コマンドレットは、セキュアな文字列を暗号化された標準文字列に変換します。PowerShell 7.0 からは、セキュアな文字列をプレーンテキスト文字列に変換する新しいパラメーター-AsPlainText が追加されました。
次の例は、PowerShell のバージョン 7.0 以降を必要とします。
例:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$plainText = ConvertFrom-SecureString -SecureString $secureString -AsPlainText
$plainText
この例では、まず ConvertTo-SecureString コマンドレットを使用して、パスワード"MyPassword"を含む SecureString オブジェクト $secureString を作成します。次に、ConvertFrom-SecureString コマンドレットを利用して、$secureString をそのプレーンテキスト表現に変換し、結果を $plainText 変数に格納します。
出力:

PowerShell で NetworkCredential クラスを使用して Secure String をプレーンテキストに変換する
PowerShell では、[System.Net.NetworkCredential] クラスは .NET フレームワークの System.Net 名前空間の一部です。主に Web サービス、FTP サーバー、またはネットワーク共有へのアクセスのための資格情報を提供するために使用されます。
主な目的は認証ですが、プレーンテキストの資格情報が必要なシナリオでは、SecureString を plaintext に変換するためにも利用できます。
例:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$networkCredential = New-Object System.Net.NetworkCredential("", $secureString)
$plainText = $networkCredential.Password
$plainText
この例では、まず ConvertTo-SecureString コマンドレットを使用して、パスワード"MyPassword"を含む SecureString オブジェクト $secureString を作成します。次に、空のユーザー名(私たちの目的には必要ないため)とパスワードを含む SecureString をパラメーターとして、System.Net.NetworkCredential オブジェクト $networkCredential をインスタンス化します。
最後に、$networkCredential.Password からプレーンテキストのパスワードを取得し、$plainText に格納します。
出力:

PowerShell で GetNetworkCredential メソッドを使用して Secure String をプレーンテキストに変換する
PowerShell では、GetNetworkCredential() メソッドは PSCredential クラスの一部であり、ユーザー資格情報のセットを表すために使用されます。このメソッドは、PSCredential オブジェクト内に格納されたパスワードのプレーンテキスト表現を抽出するために主に使用されます。
例:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("username", $secureString)
$plainText = $credential.GetNetworkCredential().Password
$plainText
この例では、まず ConvertTo-SecureString コマンドレットを使用して、パスワード"MyPassword"を含む SecureString オブジェクト $secureString を作成します。次に、ダミーユーザー名と $secureString をパスワードとして持つ PSCredential オブジェクト $credential を作成します。
最後に、$credential.GetNetworkCredential().Password メソッドを使用して、PSCredential オブジェクトからプレーンテキストのパスワードを抽出します。
出力:

結論
PowerShell スクリプティングにおいて、SecureString をプレーンテキストに変換することは、さまざまなシナリオで一般的な要件です。[System.Runtime.InteropServices.Marshal]クラス、ConvertFrom-SecureString コマンドレット、[System.Net.NetworkCredential] クラス、または GetNetworkCredential() メソッドのようなメソッドを活用することで、ユーザーは機密情報を安全に取り扱いながら操作上の要件にも対応できます。
外部システム、レガシーAPI、またはネットワーク操作と相互作用する際、これらのメソッドは柔軟性と便利さを提供します。しかし、機密データを注意深く扱い、関連するセキュリティへの影響を考慮することが重要です。
