在Objective-C中加密登录凭据并在PHP中解密

时间:2011-07-09 22:30:27

标签: php objective-c encryption aes

我四处搜寻了几个小时,找到了一些可以帮助我尝试做什么但找不到我工作的东西。

基本上我要做的是加密我的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);

非常感谢您的帮助。我一直在寻找,但没有发现任何对我有用的东西。认为他们会更多地向我提出类似的问题,因为它似乎是常用的东西。

1 个答案:

答案 0 :(得分:1)

首先,为什么需要将密码发送到加密的服务器?为什么不通过SSL连接发送它,然后让服务器验证密码是否与数据库中的密码哈希相匹配?此外,应该不需要加密用户名。只是密码。

为了加密然后解密,您将需要某种可以记忆的加密密钥或密码。我建议您在iPhone上加密密码,然后在服务器上简单地存储它。您可以使用php的crypt()函数轻松创建哈希并将它们存储在数据库中。