Come convertire una stringa sicura in testo normale in PowerShell

  1. Usa la classe Marshal per convertire una Secure String in testo semplice in PowerShell
  2. Usa il cmdlet ConvertFrom-SecureString per convertire una Secure String in testo semplice in PowerShell
  3. Usa la classe NetworkCredential per convertire una Secure String in testo semplice in PowerShell
  4. Usa il metodo GetNetworkCredential per convertire una Secure String in testo semplice in PowerShell
  5. Conclusione
Come convertire una stringa sicura in testo normale in PowerShell

PowerShell offre vari metodi per gestire gli oggetti SecureString, progettati per proteggere informazioni sensibili in memoria. Tuttavia, ci sono scenari in cui diventa necessario convertire SecureString in testo semplice nonostante i rischi per la sicurezza.

In questo articolo, esploreremo diversi metodi per ottenere questa conversione, inclusi l’uso della classe Marshal, del cmdlet ConvertFrom-SecureString, della classe NetworkCredential e del metodo GetNetworkCredential(). Ogni metodo offre i propri vantaggi e considerazioni, fornendo flessibilità nella gestione sicura dei dati sensibili all’interno degli script di PowerShell.

Usa la classe Marshal per convertire una Secure String in testo semplice in PowerShell

In PowerShell, la classe [System.Runtime.InteropServices.Marshal] fornisce metodi per facilitare l’interoperabilità con il codice non gestito e manipolare la memoria. Due dei suoi metodi, SecureStringToBSTR e PtrToStringAuto(), svolgono un ruolo cruciale nella conversione di SecureString in testo semplice.

Esempio:

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

In questo esempio, prima creiamo un oggetto SecureString chiamato $secureString contenente la password "MyPassword" utilizzando il cmdlet ConvertTo-SecureString. Quindi, utilizziamo [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString) per convertire il SecureString in una rappresentazione BSTR (Basic String).

Infine, [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr) viene utilizzato per convertire la rappresentazione BSTR in testo semplice e memorizzarla nella variabile $plainText.

Output:

convertire securestring di powershell in testo normale - output 1

Usa il cmdlet ConvertFrom-SecureString per convertire una Secure String in testo semplice in PowerShell

Il cmdlet ConvertFrom-SecureString converte la stringa sicura in una stringa standard crittografata. A partire da PowerShell 7.0, è stato aggiunto un nuovo parametro -AsPlainText, che converte una stringa sicura in una stringa di testo semplice.

Il seguente esempio richiede la versione 7.0 o successiva di PowerShell.

Esempio:

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

In questo esempio, iniziamo creando un oggetto SecureString chiamato $secureString contenente la password "MyPassword" utilizzando il cmdlet ConvertTo-SecureString. Utilizziamo quindi il cmdlet ConvertFrom-SecureString per convertire $secureString nella sua rappresentazione in testo semplice, memorizzando il risultato nella variabile $plainText.

Output:

stringa sicura di powershell in testo normale - output 2

Usa la classe NetworkCredential per convertire una Secure String in testo semplice in PowerShell

In PowerShell, la classe [System.Net.NetworkCredential] fa parte dello spazio dei nomi System.Net del Framework .NET. Viene utilizzata principalmente per fornire credenziali per operazioni di rete, come l’accesso a servizi web, server FTP o condivisioni di rete.

Sebbene il suo scopo principale sia l’autenticazione, può essere utilizzata anche per convertire un SecureString in plaintext in scenari in cui sono richieste credenziali in formato plaintext.

Esempio:

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

In questo esempio, creiamo un oggetto SecureString chiamato $secureString contenente la password "MyPassword" utilizzando il cmdlet ConvertTo-SecureString. Quindi, creiamo un oggetto System.Net.NetworkCredential, $networkCredential, fornendo un nome utente vuoto (poiché non è necessario per il nostro scopo) e il SecureString contenente la password come parametri.

Infine, recuperiamo la password plaintext da $networkCredential.Password e la memorizziamo in $plainText.

Output:

clear; $SecureString = New-Object System.Security.SecureString; $PlainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString)); $PlainText {CODE_BLOCK_8}

Usa il metodo GetNetworkCredential per convertire una Secure String in testo semplice in PowerShell

In PowerShell, il metodo GetNetworkCredential() fa parte della classe PSCredential, utilizzata per rappresentare un insieme di credenziali utente. Questo metodo viene utilizzato principalmente per estrarre la rappresentazione in plaintext della password memorizzata all’interno di un oggetto PSCredential.

Esempio:

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

In questo esempio, iniziamo creando un oggetto SecureString chiamato $secureString contenente la password "MyPassword" utilizzando il cmdlet ConvertTo-SecureString. Poi, creiamo un oggetto PSCredential chiamato $credential con un nome utente fittizio e il $secureString come password.

Infine, utilizziamo il metodo $credential.GetNetworkCredential().Password per estrarre la password plaintext dall’oggetto PSCredential.

Output:

convertire securestring di powershell in testo normale - output 4

Conclusione

Nella programmazione PowerShell, convertire SecureString in testo semplice è una necessità comune in vari scenari. Sfruttando metodi come la classe [System.Runtime.InteropServices.Marshal], il cmdlet ConvertFrom-SecureString, la classe [System.Net.NetworkCredential] o il metodo GetNetworkCredential(), gli utenti possono gestire in modo sicuro informazioni sensibili mentre soddisfano anche requisiti operativi.

Che si tratti di interagire con sistemi esterni, API legacy o operazioni di rete, questi metodi offrono flessibilità e convenienza. Tuttavia, è fondamentale gestire i dati sensibili con cura e considerare le implicazioni di sicurezza coinvolte.

Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
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

Articolo correlato - PowerShell String