PowerShell에서 MD5 체크섬을 얻는 방법
- PowerShell에서 MD5 해싱 알고리즘 사용하기
-
PowerShell에서
[System.Security.Cryptography.MD5]
클래스 사용하기 -
PowerShell에서
MD5CryptoServiceProvider
클래스 사용하기 - 결론

PowerShell에서 데이터 무결성과 보안을 보장하는 데 있어 MD5 해싱 알고리즘은 보안 맥락에서의 상대적 중요성이 줄어들고 있음에도 여전히 유용한 도구입니다. 취약점으로 인해 암호화 용도로는 권장되지 않지만, MD5는 파일 전송을 검증하고 변조를 감지하는 데 유용합니다.
PowerShell의 기능을 활용하여 MD5 체크섬을 계산하는 다양한 방법을 탐색하며, 기본 및 고급 접근 방식에 대한 통찰력을 제공합니다.
PowerShell에서 MD5 해싱 알고리즘 사용하기
MD5가 보안에 권장되지 않더라도, 파일 전송이 변조되었는지 또는 성공했는지를 확인하는 데 훌륭한 솔루션입니다.
먼저, 전송 전과 후의 파일의 MD5 지문을 가져옵니다.
같은 값이 나올 경우, 파일 전송이 변조되지 않은 것입니다. 그렇지 않으면 손상된 것입니다.
이를 위해 우리는 Get-FileHash
cmdlet을 사용할 것입니다. Get-FileHash
cmdlet은 파일의 해시 값을 표시합니다.
기본적으로 SHA256
알고리즘을 사용하지만, 우리는 추가 매개변수를 추가하여 MD5
를 사용할 수 있습니다.
Get-FileHash [-Path] <file> [[-Algorithm] <algo>] [Options]
-Algorithm
: 사용할 해시 알고리즘을 지정합니다. 이 경우, 우리는MD5
를 사용합니다.-Path
: 해시 값을 계산할 파일의 경로를 지정합니다.
파일 경로 대신 스트림과 함께 사용할 수도 있습니다.
Get-FileHash [-InputStream] <stream> [[-Algorithm] <algo>] [Options]
-
[-InputStream] <stream>
: 해시 계산을 위한 입력 스트림을 지정하며, 기본값은-Path
로 지정된 파일입니다. -
[[-Algorithm] <algo>]
: 사용할 해시 알고리즘(예:MD5
,SHA1
)을 지정합니다. -
[Options]
: 사용자 정의 및 오류 처리를 위한 추가 설정으로-Path
,-LiteralPath
,-Force
등이 있습니다.
다음은 예시입니다:
Get-FileHash -Path "path\example.txt" -Algorithm MD5
이 코드에서는 "C:\Path\To\File.txt"
에 위치한 파일의 MD5 체크섬을 계산하기 위해 Get-FileHash
cmdlet을 사용합니다. cmdlet은 지정된 파일에 대한 MD5 해시 값을 자동으로 계산합니다.
출력:
-Path
인수는 필수가 아니므로 사용할 필요가 없습니다. 대신 파일 경로를 지정하고 알고리즘 매개변수를 추가하여 SHA256
대신 MD5
를 사용합니다.
PowerShell 스크립트에서 변수를 생성하여 결과를 저장하고, $variable.Hash
와 같이 해시 속성을 사용하여 원본 파일과 동일한 값인지 확인할 수 있습니다.
PowerShell에서 문자열 해싱하기
안타깝게도 PowerShell에서 문자열로부터 해시를 생성하는 직접적인 함수나 기본 명령은 없습니다.
하지만, Get-FileHash
를 스트림 매개변수와 함께 사용하는 것이 가능하므로 문자열의 해시를 계산하는 해결책이 됩니다.
아래 스니펫으로 바로 시작해보겠습니다:
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("MD5Online")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream -Algorithm MD5
이 코드 스니펫에서는 MemoryStream
객체 $stringAsStream
를 생성하고, StreamWriter $writer
를 초기화하여 문자열 MD5Online
을 스트림에 씁니다. 그런 다음 데이터가 스트림에 기록되도록 작성기를 플러시합니다.
스트림의 위치를 처음으로 되돌린 후, Get-FileHash
cmdlet을 사용하여 -InputStream
매개변수를 $stringAsStream
으로, -Algorithm
매개변수를 MD5
로 설정합니다. 이 명령은 제공된 문자열의 MD5
체크섬을 계산합니다.
출력:
이 기사 첫 번째 섹션과 비교하여 유일한 변화는 -Path
대신 -InputStream
을 사용했다는 것입니다.
출력을 보면, 문자열의 MD5
해시를 결과로 받습니다.
PowerShell에서 [System.Security.Cryptography.MD5]
클래스 사용하기
[System.Security.Cryptography.MD5]
클래스는 데이터의 MD5 해시 값을 계산하는 기능을 제공합니다. 이 클래스는 .NET Framework의 Cryptography 네임스페이스의 일부이며, PowerShell 스크립트에서 MD5 체크섬을 생성하기 위한 견고하고 효율적인 솔루션을 제공합니다.
[System.Security.Cryptography.MD5]
클래스는 MD5 해시 값을 계산하기 위한 ComputeHash()
라는 메서드를 제공합니다. 구문은 다음과 같습니다:
$md5 = [System.Security.Cryptography.MD5]::Create()
$hash = $md5.ComputeHash($data)
$md5
:Create()
메서드를 사용하여 생성된 MD5 클래스 인스턴스를 나타냅니다.$hash
: 계산된 MD5 해시 값을 저장합니다.$data
: MD5 체크섬을 계산할 데이터입니다. 이 데이터는 파일 내용을 나타내는 바이트 배열이거나 문자열일 수 있습니다.
예시는 다음과 같습니다:
$data = [System.Text.Encoding]::UTF8.GetBytes("MD5Example")
$md5 = [System.Security.Cryptography.MD5]::Create()
$hash = $md5.ComputeHash($data)
$hashString = [System.BitConverter]::ToString($hash) -replace '-', ''
Write-Output $hashString
이 코드 스니펫에서는 문자열 MD5Example
을 [System.Text.Encoding]::UTF8.GetBytes()
를 사용하여 바이트 배열로 변환합니다. 그런 다음 [System.Security.Cryptography.MD5]::Create()
를 사용하여 MD5 클래스의 인스턴스를 생성하고, 제공된 데이터에 대한 MD5 해시 값을 생성하기 위해 ComputeHash()
메서드를 호출합니다.
마지막으로, [System.BitConverter]::ToString()
을 사용하여 해시 값을 문자열 형식으로 변환하고, -replace
연산자를 사용하여 출력에서 모든 대시를 제거합니다.
출력:
PowerShell에서 MD5CryptoServiceProvider
클래스 사용하기
MD5CryptoServiceProvider
클래스는 .NET Framework의 Cryptography 네임스페이스의 일부입니다. 이 클래스는 MD5 암호화 알고리즘을 사용하여 데이터의 MD5 해시 값을 계산하는 기능을 제공합니다.
MD5CryptoServiceProvider
클래스는 MD5 해시 값을 계산하기 위한 ComputeHash()
라는 메서드를 제공합니다. 구문은 다음과 같습니다:
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = $md5.ComputeHash($data)
$md5
:New-Object
를 사용하여 생성된MD5CryptoServiceProvider
클래스의 인스턴스를 나타냅니다.$hash
: 계산된 MD5 해시 값을 저장합니다.$data
: MD5 체크섬을 계산할 데이터입니다. 이 데이터는 파일 내용을 나타내는 바이트 배열이거나 문자열일 수 있습니다.
예시는 다음과 같습니다:
$data = [System.Text.Encoding]::UTF8.GetBytes("MD5Example")
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = $md5.ComputeHash($data)
$hashString = [System.BitConverter]::ToString($hash) -replace '-', ''
Write-Output $hashString
이 코드 스니펫에서는 문자열 MD5Example
을 [System.Text.Encoding]::UTF8.GetBytes()
를 사용하여 바이트 배열로 변환합니다. 그런 다음 New-Object
를 사용하여 MD5CryptoServiceProvider
클래스의 인스턴스를 생성하고, 제공된 데이터에 대한 MD5 해시 값을 생성하기 위해 ComputeHash()
메서드를 호출합니다.
마지막으로, [System.BitConverter]::ToString()
을 사용하여 해시 값을 문자열 형식으로 변환하고, -replace
연산자를 사용하여 출력에서 모든 대시를 제거합니다.
출력:
결론
PowerShell은 MD5 체크섬을 계산하기 위한 여러 가지 경로를 제공하며, 각 경로는 다양한 시나리오와 복잡성 수준에 적합합니다. Get-FileHash
와 같은 기본 cmdlet을 사용하든, System.Security.Cryptography.MD5
와 같은 .NET 클래스를 활용하든, MD5CryptoServiceProvider
와 같은 암호화 공급자를 사용하든, PowerShell 사용자는 데이터 무결성과 보안을 보장하기 위한 다양한 도구를 사용할 수 있습니다.
이러한 방법을 이해하고 효과적으로 활용함으로써, PowerShell 스크립트는 MD5 체크섬이 필요한 작업을 자신 있게 정밀하게 처리할 수 있습니다.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn