본문 바로가기

General/Tip For Programming

[MD5] File MD5 hash


MD5는 입력 데이터 (길이에 상관없는 하나의 메시지)로부터 128 비트 메시지 축약을 만듦으로써 데이터 무결성을 검증하는데 사용되는 알고리즘이다. MD5는 전자 서명 응용프로그램들과 함께 사용할 목적으로 미국 MIT의 로널드 리베스트 교수가 개발하였으며, 큰 파일들은 RSA와 같은 공개키 암호 사용법하에서 개인키와 함께 암호화되기 전에 안전한 방법으로 압축되어야만 한다. MD5 규격은 현재 IETF RFC 1321에 명시되어 있다. MD5 규격에 따르면, MD5 알고리즘에 입력된 어떤 두 개의 메시지가 동일한 메시지 축약을 결과로 내거나, 또는 어떤 메시지 축약을 통해 엉뚱한 메시지가 만들어지는 것은 "계산적으로 불가능"하다고 한다. MD5는 리베스트가 만들어낸 메시지 축약 알고리즘으로는 세 번째이다. 초기의 8 비트 버전인 MD2, 그리고 MD4와 최신 버전인 MD5 등은 비슷한 구조를 가지고 있지만, MD2는 8 비트 컴퓨터에 최적화되어 있는데 비해, MD4와 MD5는 32 비트 컴퓨터에 최적화되어 있다. MD5 알고리즘은 MD4의 확장판인데, MD4에 비해 속도가 빠르지는 않지만, 데이터 보안성에 있어 더 많은 확신을 제공한다.

출처 : http://terms.co.kr/MD5.htm 


파일의 유효성 검사를 하기위해서 MD5 hash를 해서 비교를 해야할 필요가 있어 테스트를 해봅니다.

터미널(Mac OS), Objective-C(iPhone), Java(Android)에서 테스트를 해보았습니다.



유효성 검사에 사용된 비교용 파일

  12월 운세와 2012년 운세가 궁금하신 분들은 아래의 링크로 다운로드 받습니다 ^^ ㅋ

  월별운세 12월

  - 아이폰 - 앱스토어 - http://goo.gl/mZojj
  - 안드로이드 - 마켓 - http://goo.gl/JfEG9
  - 안드로이드 - 티스토어 - http://goo.gl/i9psE

  2012 토정비결S
  - 아이폰 - 앱스토어 - http://goo.gl/WCXT9
  - 안드로이드 - 마켓 - http://goo.gl/lL33w
  - 안드로이드 - 티스토어 - http://goo.gl/7HWi8  






Java





 테스트 결과

  06a318e14c56490faf6ed588fad9b382
 


테스트 프로젝트




Objective-C(iPhone)

출처 : http://goo.gl/SsTqN


#import <CommonCrypto/CommonDigest.h>
  @implementation NSData(MD5)   - (NSString*)MD5 { // Create byte array of unsigned chars unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];   // Create 16 byte MD5 hash value, store in buffer CC_MD5(self.bytes, self.length, md5Buffer);   // Convert unsigned char buffer to NSString of hex values NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) [output appendFormat:@"%02x",md5Buffer[i]];   return output; }   @end

#import "NSData+MD5.h"
  ...   NSString *path = [[NSBundle mainBundle] pathForResource:@"TestFile" ofType:@"txt"]; NSData *nsData = [NSData dataWithContentsOfFile:path]; if (nsData) NSLog(@"%@", [nsData MD5]);

 테스트 결과

 2011-12-02 15:07:05.129 iPhoneApp[1742:b303] 06a318e14c56490faf6ed588fad9b382
 

테스트 프로젝트




터미널



 테스트 결과

 06a318e14c56490faf6ed588fad9b382