프로그래밍을 이용하여 파일을 생성하거나 이동시킬때 md5 와 같은 무결성 검증을 위한 해시체크 파일을 생성해야 할때가 있습니다. 물론 간단한 유틸리티를 내려받아 윈도우 쉘 명령어로 만드는 방법도 있겠지만 굳이 프로그래밍에 의한 결과를 다시 사용자가 손으로 작업하는 것은 효율 적인 방법이라고 하기는 어렵겠죠.
그래서 이번에는 C# 프로그램에서 바로 md5 파일을 생성하는 방법을 소개해 드릴까 합니다.
일단 기본은 아래와 같습니다.
// 코드 최 상단에 아래와 같은 using 지시문을 넣어 줍니다.
using System.Security.Cryptography;
// 코드내에 아래의 함수를 추가하여 해시문자열을 받아올 수 있습니다.
// 해시 문자열을 스트링으로 받아오는 함수, 아래 str 은 파일의 경로를 지정한다.
private static string getMD5Hash(string str)
{
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(str))
{
var hash = md5.ComputeHash(stream);
return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
}
}
}
이렇게 하면 getMD5Hash(파일경로) 라는 함수를 이용하여 해시체크용 문자열을 가져올 수 있습니다. 굳이 다른 유틸리티 없이도 본인이 개발중인 프로그램 내에서 md5 체크썸 파일을 만들 수 있는 것이죠.
md5 파일을 만드는것 까지 해보면 아래와 같습니다.
저의 경우에는 디렉토리 하위에 모든 파일에 대한 체크썸 파일이 필요했기 때문에 하위 디렉토리를 돌며 파일 및 폴더를 탐색하는 재귀함수 형태로 제작을 했습니다.
using System.Security.Cryptography;
.
.
.
private static void createmd5(string _path, string md5name)
{
string dirName = Directory.GetParent(md5name).ToString() + "\\";
string tmp = "";
chkDir_md5(ref tmp, _path, dirName);
File.WriteAllText(md5name, tmp);
}
// 지정된 폴더를 탐색하며 하위의 모든 폴더, 파일을 검사 후 문자열 기록
private static void chkDir_md5 (ref string _str, string _path, string _defPath)
{
FileAttributes att = File.GetAttributes(_path);
if ((att & FileAttributes.Directory) == FileAttributes.Directory)
{
// is a Directories
string[] tmpPath = Directory.GetDirectories(_path, "*");
foreach (string s in tmpPath)
{
chkDir_md5(ref _str, s, _defPath);
}
string[] tmpFiles = Directory.GetFiles(_path, "*.*");
foreach (string s in tmpFiles)
{
chkDir_md5(ref _str, s, _defPath);
}
}
else
{
// is a file
_str += getMD5Hash(_path);
_str += " *" + _path.Replace(_defPath, "");
_str += "\n";
}
}
private static string getMD5Hash(string str)
{
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(str))
{
var hash = md5.ComputeHash(stream);
return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
}
}
}
찬찬히 보시면 전혀 어려울 것이 없으니 훓어 보시기 바랍니다.
md5 파일을 제작하여 원본파일과 함께 배포를 하게 되면 파일을 전달받는 위치에서 해당 파일이 원본과 동일하지를 판단할 수 있으며 압축/압축해제시 또는 웹서버에 올라간 데이터가 네트웍망을 타고 내려오는 동인 손실이 있었는지를 파악하는데 도움이 됩니다.
이상으로 c# 에서 MD5 체크썸 파일을 만드는 방법을 소개해 드렸습니다.
2020/07/21 - [DEV/c#] - C# 문자열 읽어서 문자열에 해당하는 변수에 값 세팅하기
2020/05/28 - [DEV/c#] - [c#] 주어진 경로가 디렉토리인지 파일인지 확인하는 방법
2020/04/03 - [DEV/c#] - ImageMagick 을 이용하여 이미지 컨트롤 해보기
2020/01/03 - [DEV/c#] - [C#] C# APP 에서 엑셀 연동해보기
2019/06/21 - [DEV/c#] - [C#] 마우스 매크로를 위한 마우스 자동 클릭 기능 만들기
'DEV > c#' 카테고리의 다른 글
C# 문자열 읽어서 문자열에 해당하는 변수에 값 세팅하기 (0) | 2020.07.21 |
---|---|
C# .net으로 photoshop 연동하기 (0) | 2020.06.03 |
[c#] 주어진 경로가 디렉토리인지 파일인지 확인하는 방법 (0) | 2020.05.28 |
ImageMagick 을 이용하여 이미지 컨트롤 해보기 (0) | 2020.04.03 |
재택근무 필수 유틸 "자리안비움" - 윈도우 꺼짐 방지 (81) | 2020.03.09 |