如何在 PowerShell 中將安全字串轉換為明文

  1. 在 PowerShell 中使用 Marshal 類將安全字串轉換為明文
  2. 在 PowerShell 中使用 ConvertFrom-SecureString cmdlet 將安全字串轉換為明文
  3. 在 PowerShell 中使用 NetworkCredential 類將安全字串轉換為明文
  4. 在 PowerShell 中使用 GetNetworkCredential 方法將安全字串轉換為明文
  5. 結論
如何在 PowerShell 中將安全字串轉換為明文

PowerShell 提供了多種處理 SecureString 對象的方法,這些對象旨在保護內存中的敏感信息。然而,在某些情況下,儘管存在安全風險,但仍有必要將 SecureString 轉換為明文。

在本文中,我們探討了實現此轉換的不同方法,包括使用 Marshal 類、ConvertFrom-SecureString cmdlet、NetworkCredential 類和 GetNetworkCredential() 方法。每種方法都有其優缺點和考慮因素,為在 PowerShell 腳本中安全處理敏感數據提供了靈活性。

在 PowerShell 中使用 Marshal 類將安全字串轉換為明文

在 PowerShell 中,[System.Runtime.InteropServices.Marshal] 類提供了與非管理代碼進行互操作和操作內存的方法。它的兩個方法 SecureStringToBSTRPtrToStringAuto() 在將 SecureString 轉換為明文時起著關鍵作用。

示例:

$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$secureStringPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
$plainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr)
$plainText

在此示例中,我們首先創建一個名為 $secureStringSecureString 對象,其中包含用 ConvertTo-SecureString cmdlet 創建的密碼 "MyPassword"。然後,我們使用 [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)SecureString 轉換為 BSTR(基本字符串)表示。

最後,使用 [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr) 將 BSTR 表示轉換為明文並存儲在 $plainText 變量中。

輸出:

powershell securestring 轉換為純文本 - 輸出 1

在 PowerShell 中使用 ConvertFrom-SecureString cmdlet 將安全字串轉換為明文

ConvertFrom-SecureString cmdlet 將安全字符串轉換為加密標準字符串。從 PowerShell 7.0 開始,新增了一個參數 -AsPlainText,將安全字符串轉換為明文字符串。

以下示例需要 PowerShell 版本 7.0 或更高版本。

示例:

$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$plainText = ConvertFrom-SecureString -SecureString $secureString -AsPlainText
$plainText

在此示例中,我們首先創建一個名為 $secureStringSecureString 對象,其中包含用 ConvertTo-SecureString cmdlet 創建的密碼 "MyPassword"。然後,我們利用 ConvertFrom-SecureString cmdlet 將 $secureString 轉換為其明文表示,並將結果存儲在 $plainText 變量中。

輸出:

powershell securestring 轉換為純文字 - 輸出 2

在 PowerShell 中使用 NetworkCredential 類將安全字串轉換為明文

在 PowerShell 中,[System.Net.NetworkCredential] 類是 .NET Framework 的 System.Net 命名空間的一部分。它主要用於提供網絡操作的憑證,例如訪問網絡服務、FTP 伺服器或網絡共享。

雖然它的主要目的是身份驗證,但在需要 plaintext 憑證的情況下,也可以用於將 SecureString 轉換為 plaintext

示例:

$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$networkCredential = New-Object System.Net.NetworkCredential("", $secureString)
$plainText = $networkCredential.Password
$plainText

在此示例中,我們創建一個名為 $secureStringSecureString 對象,其中包含用 ConvertTo-SecureString cmdlet 創建的密碼 "MyPassword"。然後,我們實例化一個 System.Net.NetworkCredential 對象 $networkCredential,提供一個空用戶名(因為我們的目的不需要)和包含密碼的 SecureString 作為參數。

最後,我們從 $networkCredential.Password 中檢索 plaintext 密碼並將其存儲在 $plainText 中。

輸出:

powershell securestring 轉換為明文 - 輸出 3

在 PowerShell 中使用 GetNetworkCredential 方法將安全字串轉換為明文

在 PowerShell 中,GetNetworkCredential() 方法是 PSCredential 類的一部分,該類用於表示一組用戶憑證。此方法主要用於提取存儲在 PSCredential 對象中的密碼的 plaintext 表示。

示例:

$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("username", $secureString)
$plainText = $credential.GetNetworkCredential().Password
$plainText

在此示例中,我們首先創建一個名為 $secureStringSecureString 對象,其中包含用 ConvertTo-SecureString cmdlet 創建的密碼 "MyPassword"。接下來,我們創建一個名為 $credentialPSCredential 對象,使用一個虛擬用戶名和 $secureString 作為密碼。

最後,我們使用 $credential.GetNetworkCredential().Password 方法從 PSCredential 對象中提取 plaintext 密碼。

輸出:

powershell securestring 轉換為明文 - 輸出 4

結論

在 PowerShell 腳本中,將 SecureString 轉換為明文在各種情況下是一個常見需求。通過利用如 [System.Runtime.InteropServices.Marshal] 類、ConvertFrom-SecureString cmdlet、[System.Net.NetworkCredential] 類或 GetNetworkCredential() 方法,使用者可以安全地處理敏感信息,同時滿足操作需求。

無論是與外部系統、舊版 API 還是網絡操作互動,這些方法都提供了靈活性和便利性。然而,對於敏感數據的處理,必須謹慎並考慮涉及的安全隱患。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

相關文章 - PowerShell String