파일을 유효성을 검증하기 위하여 해시값(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 |
---|