Compute File Hash(MD5, SHA1, ETC..)
Introduction
서버와 통신을 하는 Application 을 개발하다 보면, 필수적으로 사용자가 프로그램을 변조하였는지 확인해야 할 경우가 많습니다. 이 경우 일반적으로 프로그램이 실행될 때, 미리 서버에 등록해 놓은 HASH 값과 비교하여 변조 유무를 판단합니다. 아래 코드는 HASH 값을 추출하기 위한 Sample 코드입니다.
Using the code
using System.IO;
using System.Security.Cryptography;
public static class FileHashUtil
{
/// <summary>
/// 파일로부터 MD5 Hash를 생성합니다.
/// </summary>
/// <param name="FilePath">파일 경로</param>
/// <returns>MD5 Hash 문자열</returns>
public static string ComputeMD5Hash(string FilePath)
{
return ComputeHash(FilePath, new MD5CryptoServiceProvider());
}
/// <summary>
/// 파일로부터 SHA1 Hash를 생성합니다.
/// </summary>
/// <param name="FilePath">파일 경로</param>
/// <returns>SHA1 Hash 문자열</returns>
public static string ComputeSHA1Hash(string FilePath)
{
return ComputeHash(FilePath, new SHA1CryptoServiceProvider());
}
/// <summary>
/// 파일로부터 입력받은 알고리즘으로 Hash를 생성합니다.
/// </summary>
/// <param name="FilePath">파일 경로</param>
/// <param name="Algorithm">Hash 알고리즘</param>
/// <returns>Hash 문자열</returns>
public static string ComputeHash(string FilePath, HashAlgorithm Algorithm)
{
FileStream FileStream = File.OpenRead(FilePath);
try
{
byte[] HashResult = Algorithm.ComputeHash(FileStream);
string ResultString = BitConverter.ToString(HashResult).Replace("-", "");
return ResultString;
}
finally
{
FileStream.Close();
}
}
}
Comment
MD5, SHA1 등 과 같이 기본적으로 제공하는 알고리즘 이외에도 HashAlgorithm 상속받는 객체를 이용하여 HASH 값을 구할 수 있습니다