2011-07-09 1 views
1

私は何をしようとしているのかに役立つかもしれない何かを見つけるために何時間も検索しましたが、Objective-Cでログイン資格情報を暗号化し、PHPで復号化します

基本的に私のiPhoneアプリケーションのログイン資格情報(ユーザー名とパスワード)を暗号化し、自分のサーバー上のphpファイルに送信し、それらを復号化し、データベースの内容を検証します。

私はiPhone開発に精通していますが、暗号化/セキュリティ関連の何かをしている人はいません。私は正しく私はローカル暗号化されたデータのブロブを送信するだけでなく、正しくiphoneの暗号化を行っていると思うが、どこで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); 

おかげで多くを使用してコードイムの一部。私はしばらくの間探していて、私のために働いたものは見つけられませんでした。私はそれが一般的に使用されるもののように思えるので、私には同様の質問があると思っています。

答えて

1

まず、サーバーにパスワードを暗号化して送信する必要があるのはなぜですか?なぜSSL接続を介してそれを送信し、次にパスワードがデータベースのパスワードハッシュと一致することをサーバーに確認させるのはなぜですか?また、ユーザー名を暗号化する必要はありません。パスワードだけ。

暗号化して解読するには、暗黙のうちに暗記することができる暗号化キーまたはパスフレーズが必要です。私はあなたのパスワードをiPhoneに暗号化して保存しておき、それをサーバー上に単純にハッシュしておくことをお勧めします。 PHPのcrypt()関数を使って簡単にハッシュを作成し、データベースに格納することができます。

+1

前回の回答に「あなたのログインを忘れました」というコメントはありませんでした。本当に同じパスワードを返す必要はありますか?なぜユーザーにパスワードをリセットするオプションを与えるだけではないのですか? 「パスワードを忘れた」ボタンをクリックすると、実際に私は自分の現在のパスワードをメールで送ってきます。データベースに容易に取り出せる形式(おそらくプレーンテキスト)で保存していることを示しています。 – Mike

+0

さて、私はプレーンテキストで保存しないで、それを送信する前に解読するだけですが、これは良い選択です。それらにランダムな一時パスワードを入力します。 – JLoewy

+0

実際には、サーバー上の任意の場所にある暗号解読キーで暗号化して保存することは、本質的にプレーンテキストで保管しています。 – Mike

関連する問題