2009-04-12 85 views
1

我想在C中用MD5做一些事情(後者試圖用SHA1算法做一些事情)。我的主要問題是,我從來沒有真正做過任何複雜的C,只是簡單的東西(沒有像指針或結構指針)。試圖瞭解MD5算法

I got the md5 algorithm here.

我在我的C項目包括文件md5.cmd5.h(使用代碼塊),但唯一的問題是,我真的不知道如何使用它。我已經閱讀並重新閱讀了代碼,並且我不明白我如何使用這些函數將「示例」轉換爲MD5散列。

我還沒有做C編程在一段時間(主要是PHP),所以我有點失落在這裏。 基本上我問的是一些使用的例子。他們通過md5main.c文件提供,但我不明白他們。

我在這裏瞄準高嗎?我應該停止這一切,並再次開始閱讀C書,或者任何人都可以給我一些指示,看看我能否弄清楚。

謝謝。

回答

5

雖然我同意比爾,但如果你想真正理解你在做什麼,你應該回到C書。但是,爲了幫助,我修改並評論了一些來自md5main.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 

希望這有助於!

5

你應該停止所有這一切並重新開始閱讀C書。

我的經驗是,當我試圖學習一種新的編程語言時,嘗試同時實現一個複雜的項目是不現實的。您應該在C中進行簡單的練習,直到您熟悉該語言,然後解決諸如實現MD5或整合現有實現等內容。

順便說一句,閱讀代碼是一種與編寫代碼不同的技能。這兩種技能之間存在差異,但都需要你理解語言。

+0

我知道C,但顯然不是那麼好:( – AntonioCS 2009-04-12 18:13:50

+0

那麼,這個想法同樣適用於「刷新自己一段時間以來我沒用過的語言」。你必須在跑步之前走路。 – 2009-04-12 18:43:50

+0

你是對的。:) – AntonioCS 2009-04-14 21:49:15

2

我認爲你選擇了最糟糕的事情來看待(沒有你自己的錯誤)。加密和散列類型算法將使得語言的最奇怪的用法成爲他們需要快速完成的數學類型。他們幾乎可以保證被混淆,難以理解。另外,爲了真正理解它們,你需要在數學中陷入困境。

如果你只是想要一個哈希算法,得到一個衆所周知的實現,並將其用作黑盒子。不要嘗試自己實現它,你幾乎肯定會在實現中引入一些密碼弱點。

編輯:如果您想要關於加密的優秀書籍(或資源),請充分響應,請看Bruce Schneier。 Applied Cryptography是一個經典。