2011-07-09 32 views
1

我在附近搜索了幾個小時,找到了一些可能幫助我瞭解即時消息嘗試做什麼但找不到任何事情的工作。在Objective-C中加密登錄證書並在PHP中解密

基本上我想要做的是在我的iPhone應用程序中加密登錄憑據(用戶名和密碼),將它們發送到我的服務器上的php文件,解密它們並驗證數據庫中的內容。

我在iPhone開發方面非常精通,但與密碼學/安全相關的任何事情都知之甚少。我想我正在做正確的本地iphone加密以及正確地發送加密數據的blob,但不知道從哪裏開始在php解密端。

下面有一些使用

NSString* stringTo = @"Test Encoding String"; 
NSString* key = @"1234567812345678"; 
NSData* encrypedData = [[stringTo dataUsingEncoding:NSUTF8StringEncoding] AES256EncryptWithKey:key]; 

NSString* decrypt = [[NSString alloc] initWithData:[encrypedData AES256DecryptWithKey:key] encoding:NSUTF8StringEncoding]; 
NSLog(@"\nDECRYPT :%@", decrypt); // DOES RETURN THE SAME VALUE 


NSString *urlString = @"SERVERNAME/FILE.php"; 

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
[request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

NSMutableData *body = [NSMutableData data]; 

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"encryptedString\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:encrypedData]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

[request setHTTPBody:body]; 

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
NSLog(@"RS: %@", returnString); 

非常感謝任何幫助代碼IM的。我一直在尋找一段時間,並沒有找到任何爲我工作的東西。認爲他們會更喜歡與我類似的問題,因爲它似乎是一種常用的東西。

回答

1

首先,您爲什麼需要將密碼發送到服務器進行加密?爲什麼不通過SSL連接發送它,然後讓服務器驗證密碼是否與數據庫中的密碼哈希匹配?另外,應該不需要加密用戶名。只是密碼。

爲了加密和解密,你需要一些你可以記住的加密密鑰或密碼。我建議你在iPhone上存儲你的密碼,然後在服務器上簡單地加密。您可以使用php的crypt()函數輕鬆創建哈希並將它們存儲在數據庫中。

+1

我沒有注意到你之前回答的「忘記登錄」評論。真的有必要返回相同的密碼嗎?爲什麼不給用戶選擇重置密碼。當我點擊「忘記密碼」按鈕時,我實際上生氣了,他們給我發了我當前的密碼,因爲它顯示他們正在將數據以易於檢索的格式(可能是純文本)存儲起來。 – Mike

+0

嗯,我不會以純文本的形式存儲它,只是在發送它們之前解密它,但這是一個很好的選擇。爲他們提供一個隨機的臨時密碼。 – JLoewy

+0

實際上,使用解密密鑰在服務器上的任何位置存儲它,實質上都是以純文本形式存儲它。 – Mike