PowerShell에서 보안 문자열을 일반 텍스트로 변환하는 방법

  1. PowerShell에서 Marshal 클래스를 사용하여 Secure String을 일반 텍스트로 변환하기
  2. PowerShell에서 ConvertFrom-SecureString Cmdlet을 사용하여 Secure String을 일반 텍스트로 변환하기
  3. PowerShell에서 NetworkCredential 클래스를 사용하여 Secure String을 일반 텍스트로 변환하기
  4. PowerShell에서 GetNetworkCredential 메서드를 사용하여 Secure String을 일반 텍스트로 변환하기
  5. 결론
PowerShell에서 보안 문자열을 일반 텍스트로 변환하는 방법

PowerShell은 메모리에서 민감한 정보를 보호하도록 설계된 SecureString 객체를 처리하는 다양한 방법을 제공합니다. 그러나 보안 위험에도 불구하고 SecureString을 일반 텍스트로 변환해야 하는 경우가 있습니다.

이 기사에서는 Marshal 클래스, ConvertFrom-SecureString cmdlet, NetworkCredential 클래스 및 GetNetworkCredential() 메서드를 사용하여 이 변환을 달성하는 다양한 방법을 탐구합니다. 각 방법은 장점과 고려 사항을 제공하며, PowerShell 스크립트 내에서 민감한 데이터를 안전하게 처리하는 데 유연성을 제공합니다.

PowerShell에서 Marshal 클래스를 사용하여 Secure String을 일반 텍스트로 변환하기

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

이 예시에서는 먼저 ConvertTo-SecureString cmdlet을 사용하여 비밀번호 "MyPassword"를 포함하는 $secureString이라는 SecureString 객체를 만듭니다. 그런 다음 [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)를 사용하여 SecureString을 BSTR(기본 문자열) 표현으로 변환합니다.

마지막으로 [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr)를 사용하여 BSTR 표현을 일반 텍스트로 변환하고 $plainText 변수에 저장합니다.

출력:

파워셸 보안 문자열을 일반 텍스트로 변환 - 출력 1

PowerShell에서 ConvertFrom-SecureString Cmdlet을 사용하여 Secure String을 일반 텍스트로 변환하기

ConvertFrom-SecureString cmdlet은 보안 문자열을 암호화된 표준 문자열로 변환합니다. PowerShell 7.0부터는 보안 문자열을 일반 텍스트 문자열로 변환하는 새 매개 변수 -AsPlainText가 추가되었습니다.

다음 예시는 PowerShell 버전 7.0 이상이 필요합니다.

예시:

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

이 예시에서는 먼저 ConvertTo-SecureString cmdlet을 사용하여 비밀번호 "MyPassword"를 포함하는 $secureString이라는 SecureString 객체를 만듭니다. 그런 다음 ConvertFrom-SecureString cmdlet을 사용하여 $secureString을 일반 텍스트 표현으로 변환하고 그 결과를 $plainText 변수에 저장합니다.

출력:

powershell securestring을 일반 텍스트로 - 출력 2

PowerShell에서 NetworkCredential 클래스를 사용하여 Secure String을 일반 텍스트로 변환하기

PowerShell에서 [System.Net.NetworkCredential] 클래스는 .NET 프레임워크의 System.Net 네임스페이스의 일부입니다. 이 클래스는 주로 웹 서비스, FTP 서버 또는 네트워크 공유에 접근하는 것과 같은 네트워크 작업에 필요한 자격 증명을 제공하는 데 사용됩니다.

주요 목적은 인증이지만, plaintext 자격 증명이 필요한 경우 SecureStringplaintext로 변환하는 데에도 사용할 수 있습니다.

예시:

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

이 예시에서는 ConvertTo-SecureString cmdlet을 사용하여 비밀번호 "MyPassword"를 포함하는 $secureString이라는 SecureString 객체를 만듭니다. 그런 다음 빈 사용자 이름(목적에 필요하지 않음)과 비밀번호를 포함하는 SecureString을 매개변수로하여 System.Net.NetworkCredential 객체 $networkCredential을 인스턴스화합니다.

마지막으로 $networkCredential.Password에서 plaintext 비밀번호를 가져와 $plainText에 저장합니다.

출력:

파워셸 보안 문자열을 일반 텍스트로 - 출력 3

PowerShell에서 GetNetworkCredential 메서드를 사용하여 Secure String을 일반 텍스트로 변환하기

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

이 예시에서는 먼저 ConvertTo-SecureString cmdlet을 사용하여 비밀번호 "MyPassword"를 포함하는 $secureString이라는 SecureString 객체를 만듭니다. 다음으로 더미 사용자 이름과 비밀번호로서 $secureString을 사용하여 $credential이라는 PSCredential 객체를 만듭니다.

마지막으로 $credential.GetNetworkCredential().Password 메서드를 사용하여 PSCredential 객체에서 plaintext 비밀번호를 추출합니다.

출력:

파워셸 SecureString을 일반 텍스트로 변환 - 출력 4

결론

PowerShell 스크립팅에서 SecureString을 일반 텍스트로 변환하는 것은 다양한 시나리오에서 흔히 요구되는 사항입니다. [System.Runtime.InteropServices.Marshal] 클래스, ConvertFrom-SecureString cmdlet, [System.Net.NetworkCredential] 클래스 또는 GetNetworkCredential() 메서드와 같은 방법을 활용하여 사용자는 민감한 정보를 안전하게 처리하면서도 운영 요구 사항을 충족할 수 있습니다.

외부 시스템, 레거시 API 또는 네트워크 작업과 상호 작용할 때 이러한 방법은 유연성과 편리함을 제공합니다. 그러나 민감한 데이터를 주의 깊게 처리하고 관련된 보안 영향을 고려하는 것이 중요합니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
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