2011-05-31 96 views
-1

我正在使用MD5算法與使用MD5算法發送數據的服務器進行同步。 我寫了下面的代碼 -如何在iPhone/iPad中獲取用於MD5算法的密鑰

NSString *string = @"ABC"; 
    unsigned char *inStrg = (unsigned char*)[[string dataUsingEncoding:NSASCIIStringEncoding] bytes]; 
    unsigned long lngth = [string length]; 
    unsigned char result[MD5_DIGEST_LENGTH]; 
    NSMutableString *outStrg = [NSMutableString string]; 

    MD5(inStrg, lngth, result); 

    unsigned int i; 
    for (i = 0; i < MD5_DIGEST_LENGTH; i++) 
    { 
     [outStrg appendFormat:@"%02x", result[i]]; 
    } 
    md5TextField.text = outStrg; 

對於解密在服務器端,我需要通過MD5文本已經生成的密鑰。 它的關鍵是什麼? 在此先感謝...

+0

我無法理解你的問題。 MD5只是MessageDigest(哈希)算法。 MessageDigenst無法解密。 如果你想完整的數據。你可以使用MD5。 如果您想要與服務器進行身份驗證。你可以使用HMAC-MD5 如果你想封裝。您應該將MD5更改爲密碼算法(如AES,DESede ...) – TopChul 2011-05-31 06:01:23

回答

1

MD5是哈希函數,不可逆(因此設計爲不可逆)。如果你需要一個簡單的加密,你應該使用AES進行對稱加密。

切出AES Encryption for an NSString on the iPhone瞭解更多信息。

+0

如果不可逆,我可以知道如何獲取密鑰,以便在服務器端執行相同的加密,然後匹配兩個文本? – 2011-05-31 06:11:04

+0

哈希的基本思想是,你給了一個祕密(例如密碼),你需要一種方法來比較祕密,而不需要知道祕密。因此,如果您的md5(secret)= hash並在服務器端檢查散列,您將始終知道密碼正確,因爲md5(secret)始終是相同的md5散列值。 真實世界的例子:如果你爲一個在線服務創建一個帳號,他們希望只存儲你的密碼的md5散列,如果你知道登錄,他們會散列你的密碼並比較散列。結果他們永遠不會知道你的密碼是什麼。 – grundprinzip 2011-05-31 18:38:47

1

就像已經提到的那樣,你不能從哈希中得到原始值。您不可能以原始形式在服務器中存儲任何值。存儲散列並將其與您在應用中生成的散列進行比較以進行身份​​驗證。由於MD5是獨立於系統的,因此您不必擔心「密鑰」,因爲您不會將它作爲參數傳遞。如果你要將原始值存儲在服務器中,則可以計算服務器中字符串的MD5,然後進行比較。