본문 바로가기
프로그래밍

MD5 Hash를 이용한 파일 검증

by o테리o 2010. 4. 15.

파일을 유효성을 검증하기 위하여 해시값(MD5)을 이용하여 파일에 대한 유효성을 검증한다.

///<summary>

/// 파일의 해시값을 이용하여 파일을 검증합니다.

///</summary>

///<param name="filePath">검증할 파일</param>

///<param name="hash">해시값</param>

///<returns>동일한지 여부</returns>

public static bool HashCompare(string filePath, string hash)

{

string fileHash = GetHashString(filePath);



// StringComparer 클래스의 Compare(x, y)함수의 반환값이

// 0 보다 작으면 : x가 y보다 작거나 y가 null

// 0 : x와 y가 같음

// 0 보다 크면 : x가 y보다 크거나 y가 null

StringComparer comparer = StringComparer.OrdinalIgnoreCase; // 대소문자 구분없이 비교



if (comparer.Compare(fileHash, hash) == 0)

return true;

else

return false;

}



///<summary>

/// 파일의 해시값을 생성하여 문자열로 변환합니다. (MD5 이용)

///</summary>

///<param name="filePath">파일경로</param>

///<returns>파일의 해시값</returns>

public static string GetHashString(string filePath)

{

byte[] hashBytes = GetHashBytes(filePath);



// 바이트 배열로 받은 해시값을 16진수 형식의 문자열로 번환한다.

StringBuilder hashBuilder = new StringBuilder();

foreach (byte eachByte in hashBytes)

{

hashBuilder.Append(eachByte.ToString("X2"));

}



return hashBuilder.ToString();

}



///<summary>

/// 파일의 해시값을 생성하여 바이트 배열로 반환합니다. (MD5 이용)

///</summary>

///<param name="filePath">파일경로</param>

///<returns>파일의 해시값</returns>

public static byte[] GetHashBytes(string filePath)

{

byte[] hashBytes = null;



using (FileStream sourceStream = new FileStream(filePath, FileMode.Open))

{

// MD5 을 이용하여 해시값을 생성한다.

System.Security.Cryptography.MD5 fileHasher = MD5.Create();

hashBytes = fileHasher.ComputeHash(sourceStream);

sourceStream.Close();

}



return hashBytes;

}

'프로그래밍' 카테고리의 다른 글

두 바이너리 파일간의 비교  (0) 2010.04.15