一种开箱即用的加密算法,使用php和iOS

时间:2013-11-20 03:53:33

标签: php objective-c api cryptography mcrypt

我正在开发一个API,我将在iOS应用程序中与之交谈。在我的身份验证方案中,服务器和客户端都有 APP_SECRET ,登录时会发生什么:

  1. iOS应用会发送 APP_ID 以及加密的有效负载。 有效负载只是一个带有用户用户名密码的JSON对象。 有效负载使用APP_SECRET 进行编码,并发送到服务器。

  2. 服务器从iOS应用中收到 APP_ID 和有效负载,它 将搜索与给定APP_ID关联的APP_SECRET 数据库和它将尝试使用。来解密有效负载 找到APP_SECRET ,一旦解密,它会检查用户名,通过 对数据库的组合,通常记录用户。

  3. 显然,我需要在后端和前端(iOS)中使用相同的加密/解密算法。

    我尝试使用默认的 mcrypt AES256 又名 RIJNDAEL 算法来解密有问题的有效负载,这在php codeigniter中是这样的:

    $decoded_payload = $this->encrypt->decode(urldecode($login_payload),$secret_key);
    

    在iOS应用程序中,我以相同的顺序加密登录字符串:

    //Login String    
    NSString * jsonPayload = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:@{@"email":userName,@"password":password} options:0 error:nil] encoding:NSASCIIStringEncoding];
    
    //AES256 Encrypt with APP_SECRET   
    NSString * payload = [jsonPayload AES256EncryptWithKey:secret];
    
    //URL Encode
    payload = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
                                                                            (__bridge CFStringRef) payload,
                                                                            NULL,
                                                                            CFSTR("!*'();:@&=+$,/?%#[]\" "),
                                                                            kCFStringEncodingASCII));
    

    真正发生的是加密的有效负载与后端预期的有效负载完全不同,使用php解密它总是返回错误的答案。我正在寻找这个问题的具体解决方案,即使解决方案需要我更改算法。我的问题很简单。

    • 如何在iOS端使用完全模仿默认的AES256 mcrypt加密 目标C吗

    • 如果您认为上述问题的答案很乏味,那么您呢? 知道任何其他替代方案,无需开箱即用 为确保加密/解密结果在前端(ObjC)和后端(PHP)中相同,需要做多少工作?

0 个答案:

没有答案