你好吗?AFNetworking + RNCryptor - 在JSON解析之前解密数据
我想使用RNCryptor加密我的iOS设备和网络服务器之间的交易。为此,我在iOS和PHP上使用RNCryptor,并使用AFNetworking从iOS与WebServer进行通信。
在解析为JSON响应对象之前,如何解密从AFNetworking接收到的数据?
要合成的,我有:
- Yii框架,服务器端,PHP
- AFNetworling,客户端,Objective-C的
- RNCryptor,双方
从iOS到PHP:我可以在使用之前解密数据。
从PHP到iOS:AFNetworking在使用之前不会解密数据。
我的PHP代码是类似的东西:
RNCryptorHelper::init();
$encryptor = new \RNCryptor\Encryptor;
$data['Model1'] = Model1::model()->findAll();
$data['Model2'] = Model2::model()->findAll();
// EDITED TO REMOVE THIS HEADER
// header('Content-type: application/json');
echo $encryptor->encrypt(CJSON::encode($data), Yii::app()->params['cryptPassword']);
Yii::app()->end();
输出这样的事情:
AwFQ9+OfsHyXcSPynCrtveF7MQupQ+urd/VYeNMmt6OMxd6MhsDz4nxapvS1kVEHHbBZ4xLHqN7hTUDZos1LTWhB/CyeYoWpZSDhyFeHu9wNlHcRie6KTaHv/h14krvfb2/GHMt3GhIFqnyo7UKy/d06
我的Objective-C代码是什么像这样:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:[NSString stringWithFormat:@"%@/Sync", URL_ROOT]
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", [RNDecryptor decryptData:responseObject withPassword:CRYPT_PASSWORD error:nil]);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
输出以下错误:
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x15681970 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
感谢您的帮助!
编辑1
我改变了代码一点点,现在我可以得到的结果:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:[NSString stringWithFormat:@"%@/Sync", URL_ROOT]
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSData *decryptedData = [RNDecryptor decryptData:[[NSData alloc] initWithBase64EncodedData:responseObject options:NSDataBase64DecodingIgnoreUnknownCharacters]
withPassword:CRYPT_PASSWORD
error:nil];
id json = [NSJSONSerialization JSONObjectWithData:decryptedData
options:kNilOptions
error:nil];
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
任何人有关于如何创建一个响应串行器,它可以自动的提示解密?
就是这样。我改变它来接收原始数据并解密它。现在我正在研究如何创建Response Serializer来处理它。 –
完成!非常感谢你。 –