Como Converter uma String Segura em Texto Simples no PowerShell

  1. Use a Classe Marshal para Converter uma Secure String em Texto Simples no PowerShell
  2. Use o Cmdlet ConvertFrom-SecureString para Converter uma Secure String em Texto Simples no PowerShell
  3. Use a Classe NetworkCredential para Converter uma Secure String em Texto Simples no PowerShell
  4. Use o Método GetNetworkCredential para Converter uma Secure String em Texto Simples no PowerShell
  5. Conclusão
Como Converter uma String Segura em Texto Simples no PowerShell

O PowerShell oferece vários métodos para lidar com objetos SecureString, que são projetados para proteger informações sensíveis na memória. No entanto, existem cenários em que se torna necessário converter SecureString para texto simples, apesar dos riscos de segurança.

Neste artigo, exploramos diferentes métodos para realizar essa conversão, incluindo o uso da classe Marshal, o cmdlet ConvertFrom-SecureString, a classe NetworkCredential e o método GetNetworkCredential(). Cada método oferece suas vantagens e considerações, proporcionando flexibilidade para lidar com dados sensíveis de forma segura em scripts do PowerShell.

Use a Classe Marshal para Converter uma Secure String em Texto Simples no PowerShell

No PowerShell, a classe [System.Runtime.InteropServices.Marshal] fornece métodos para facilitar a interoperabilidade com código não gerenciado e manipular a memória. Dois de seus métodos, SecureStringToBSTR e PtrToStringAuto(), desempenham um papel crucial na conversão de SecureString para texto simples.

Exemplo:

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

Neste exemplo, primeiro criamos um objeto SecureString chamado $secureString contendo a senha "MyPassword" utilizando o cmdlet ConvertTo-SecureString. Em seguida, usamos [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString) para converter o SecureString em uma representação BSTR (Basic String).

Finalmente, [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr) é usado para converter a representação BSTR em texto simples e armazená-la na variável $plainText.

Saída:

texto simples do securestring do powershell - saída 1

Use o Cmdlet ConvertFrom-SecureString para Converter uma Secure String em Texto Simples no PowerShell

O cmdlet ConvertFrom-SecureString converte a string segura em uma string padrão criptografada. A partir do PowerShell 7.0, um novo parâmetro -AsPlainText foi adicionado, que converte uma string segura em uma string de texto simples.

O exemplo a seguir requer a versão 7.0 ou posterior do PowerShell.

Exemplo:

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

Neste exemplo, começamos criando um objeto SecureString chamado $secureString contendo a senha "MyPassword" usando o cmdlet ConvertTo-SecureString. Em seguida, utilizamos o cmdlet ConvertFrom-SecureString para converter $secureString em sua representação de texto simples, armazenando o resultado na variável $plainText.

Saída:

powershell securestring para texto simples - saída 2

Use a Classe NetworkCredential para Converter uma Secure String em Texto Simples no PowerShell

No PowerShell, a classe [System.Net.NetworkCredential] é parte do namespace System.Net do .NET Framework. É utilizada principalmente para fornecer credenciais para operações de rede, como acessar serviços web, servidores FTP ou compartilhamentos de rede.

Embora seu principal propósito seja a autenticação, também pode ser utilizada para converter um SecureString em plaintext em cenários onde credenciais plaintext são necessárias.

Exemplo:

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

Neste exemplo, criamos um objeto SecureString chamado $secureString contendo a senha "MyPassword" usando o cmdlet ConvertTo-SecureString. Em seguida, instanciamos um objeto System.Net.NetworkCredential, $networkCredential, fornecendo um nome de usuário vazio (já que não é necessário para nosso propósito) e o SecureString contendo a senha como parâmetros.

Finalmente, recuperamos a senha plaintext de $networkCredential.Password e a armazenamos em $plainText.

Saída:

powershell securestring para texto simples - saída 3

Use o Método GetNetworkCredential para Converter uma Secure String em Texto Simples no PowerShell

No PowerShell, o método GetNetworkCredential() faz parte da classe PSCredential, que é usada para representar um conjunto de credenciais de usuário. Este método é utilizado principalmente para extrair a representação plaintext da senha armazenada em um objeto PSCredential.

Exemplo:

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

Neste exemplo, começamos criando um objeto SecureString chamado $secureString contendo a senha "MyPassword" usando o cmdlet ConvertTo-SecureString. Em seguida, criamos um objeto PSCredential chamado $credential com um nome de usuário fictício e o $secureString como a senha.

Finalmente, usamos o método $credential.GetNetworkCredential().Password para extrair a senha plaintext do objeto PSCredential.

Saída:

powershell securestring para texto simples - saída 4

Conclusão

Na scriptografia do PowerShell, converter SecureString em texto simples é um requisito comum em vários cenários. Ao aproveitar métodos como a classe [System.Runtime.InteropServices.Marshal], o cmdlet ConvertFrom-SecureString, a classe [System.Net.NetworkCredential] ou o método GetNetworkCredential(), os usuários podem lidar com informações sensíveis de forma segura, ao mesmo tempo em que acomodam requisitos operacionais.

Seja na interação com sistemas externos, APIs legadas ou operações de rede, esses métodos oferecem flexibilidade e conveniência. No entanto, é crucial lidar com dados sensíveis com cuidado e considerar as implicações de segurança envolvidas.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
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

Artigo relacionado - PowerShell String