Зашифруйте учетные данные для входа в Objective-C и расшифруйте в PHP - PullRequest
1 голос
/ 10 июля 2011

Я часами искал, чтобы найти что-то, что могло бы помочь мне с тем, что я пытаюсь сделать, но не смог найти ничего, что я должен был сделать.

По сути, я пытаюсь зашифровать учетные данные для входа (имя пользователя и пароль) в приложении 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 Ответ

1 голос
/ 10 июля 2011

Во-первых, зачем вам отправлять пароль на сервер в зашифрованном виде? Почему бы просто не отправить его по соединению SSL, а затем заставить сервер проверить, совпадает ли пароль с хешами паролей в базе данных? Кроме того, не должно быть необходимости шифровать имя пользователя. Просто пароль.

Чтобы зашифровать, а затем расшифровать, вам понадобится какой-то ключ шифрования или фраза-пароль, которую вы можете запомнить. Я бы порекомендовал хранить ваш пароль в зашифрованном виде на iPhone, а затем просто хэш-код на сервере. Вы можете использовать функции php crypt () для простого создания хешей и сохранения их в базе данных.

...