【发布时间】:2014-08-09 09:15:47
【问题描述】:
你好吗?
我正在尝试使用 RNCryptor 来加密我在 iOS 设备和网络服务器之间的交易。为此,我在 iOS 和 PHP 上使用 RNCryptor,并使用 AFNetworking 从 iOS 到 WebServer 进行通信。
如何在从 AFNetworking 接收到的数据被解析为 JSON 响应对象之前对其进行解密?
为了综合,我有:
- 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/d6
我的 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“操作无法完成。(Cocoa 错误 3840。)”(JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。) UserInfo=0x15681970 {NSDebugDescription =JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。}
感谢您的帮助!!
编辑 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);
}];
任何人都知道如何创建一个自动解密的响应序列化程序?
【问题讨论】:
标签: objective-c encryption yii afnetworking-2 rncryptor