2009-04-12 5 views
1

MD5 (그리고 후자는 SHA1 알고리즘으로 무언가를하려고합니다)로 C에서 뭔가를하려고합니다. 내 주요 문제는 C에서 복잡한 작업을 한 번도 해본 적이 없다는 것입니다. 포인터 나 구조체에 대한 포인터와 같은 간단한 것은 아닙니다. MD5 알고리즘을 이해하려고 시도합니다.

I got the md5 algorithm here.

내가 내 C 프로젝트의 파일을 md5.cmd5.h을 포함 (codeblocks 사용)하지만 유일한 문제는 내가 정말 그것을 사용하는 방법을 이해하지 못하는 것입니다. 코드를 읽고 다시 읽었으며 '함수'를 사용하여 '예제'를 MD5 해시로 변환하는 방법을 이해하지 못합니다.

잠시 동안 (주로 PHP) C 프로그래밍을하지 않았으므로 여기서 약간 잃어 버렸습니다. 기본적으로 내가 묻는 것은 사용법의 몇 가지 예입니다. 그들은 md5main.c 파일을 통해 제공되지만 이해할 수는 없습니다.

나는 여기를 목표로하고 있습니까? 이 모든 것을 멈추고 C 책을 다시 읽기 시작해야 할까? 아니면 누군가가 나에게 약간의 조언을 해줄 수 있는지, 그리고 내가 이것을 알아낼 수 있는지 알아봐야 할까?

감사합니다.

답변

5

내가 빌과 동의하는 동안 실제로 무엇을하고 있는지 이해하고 싶다면 C 책으로 돌아 가야합니다. 그러나, 도움을위한 노력의 일환으로, 나는 ...이 도움이

const char* testData = "12345"; // this is the data you want to hash 
md5_state_t state; // this is a state object used by the MD5 lib to do "stuff" 
        // just treat it as a black box 
md5_byte_t digest[16]; // this is where the MD5 hash will go 

// initialize the state structure 
md5_init(&state); 

// add data to the hasher 
md5_append(&state, (const md5_byte_t *)testData, strlen(testData)); 

// now compute the hash 
md5_finish(&state, digest); 

// digest will now contain a MD5 hash of the testData input 

희망을 수정 md5main.c의 코드의 일부 댓글을 달았습니다!

+0

감사합니다. 나는 당신의 코드를 시험해 보았다.>> é | ╦ ♫ ÛèplL4íhæ ° N { 나는 이것을 winxp에서 콘솔에서 얻는다. 문자 코딩과 관련이 있습니까? – AntonioCS

+0

이므로 다이제스트는 바이너리입니다. 즉, 다이제스트 배열은 16 바이트가 아닌 16 바이트의 데이터로 채워집니다. 인쇄 가능한 형식이면이 루프를 사용하여 16 진수 문자열로 인쇄 할 수 있습니다. for (int di = 0; di <16; ++ di) printf ("% 02x", digest [di]); 물론 –

+0

! 고마워 지금은 일하고있다 :) – AntonioCS

5

이 모든 것을 중지하고 C 책을 다시 읽어야합니다.

내 경험에 따르면 새로운 프로그래밍 언어를 배우려고 할 때 동시에 복잡한 프로젝트를 구현하는 것은 실용적이지 않습니다. 언어에 익숙해 질 때까지 C에서 간단한 연습을 한 다음 MD5 구현 또는 기존 구현 통합과 같은 작업을 수행해야합니다.

한편, 독서 코드는 코드 작성과 다른 기술입니다. 이 두 가지 기술에는 차이가 있지만 둘 다 언어를 잘 이해해야합니다.

+0

나는 C를 알고 있지만 분명히 그다지 좋지는 않다. ( – AntonioCS

+0

글쎄,이 아이디어는 "내가 잠시 사용하지 않은 언어를 새로 고침"하기도 마찬가지다. 달려 가기 전에 걸어야한다. –

+0

당신은 맞습니다. :) – AntonioCS

2

나는 당신이 (자신의 잘못이 없음)보아야 할 최악의 상황을 선택했다고 생각합니다. 암호화 및 해시 유형 알고리즘을 사용하면 언어를 가장 이상하게 사용하여 가능한 빨리 수학을 수행 할 수 있습니다. 그들은 거의 모호 해지고 이해하기 어렵다는 보장이 있습니다. 게다가, 당신은 정말로 그들을 이해하기 위해 수학에서 수렁에 빠지게 될 것입니다.

해싱 알고리즘을 사용하려는 경우 잘 알려진 구현을 가져 와서 블랙 박스로 사용하십시오. 직접 구현하지 마십시오. 구현에 몇 가지 암호화 취약점을 거의 확실히 도입 할 것입니다.

편집 : 훌륭한 책 (또는 리소스)을 암호화하고 싶다면 충분히 응답하려면 Bruce Schneier를 찾아보십시오. Applied Cryptography은 고전입니다.

+0

+1 나는 MD5에 동의하고 그 알고리즘은 복잡하다. 이것들은 프로그래밍 언어에 익숙해 진 누군가를 위해 공부할 최고의 코드 예제는 아닙니다. –

+0

조언 주셔서 감사합니다.나는 C 책을 다시 읽고 2 진수와 16 진수를 다시 잡으려고합니다. – AntonioCS