我正在开发一个API,我将在iOS应用程序中与之交谈。在我的身份验证方案中,服务器和客户端都有 APP_SECRET
,登录时会发生什么:
iOS应用会发送 APP_ID
以及加密的有效负载。
有效负载只是一个带有用户用户名密码的JSON对象。
有效负载使用APP_SECRET
进行编码,并发送到服务器。
服务器从iOS应用中收到 APP_ID
和有效负载,它
将搜索与给定APP_ID关联的APP_SECRET
数据库和它将尝试使用。来解密有效负载
找到APP_SECRET
,一旦解密,它会检查用户名,通过
对数据库的组合,通常记录用户。
显然,我需要在后端和前端(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)中相同,需要做多少工作?