Для работы авторизации в приложении необходимо проводить AES256 дешифровку. Есть аналог на PHP. Не могу отладить до конца работу на Obj C.
Аналог на PHP на SandBoxКод на SandBox
На Objective C выполняю код:
NSString *rndEncoded = @"CzN5txPZjwyfG2/YhQ8ddqpGDIY8meeW2oZL9+Rvbzp4B1UBVsOCsTFqGJ528TfX";
const char *pass_md5 = "92877af70a45fd6a2ed7fe81e1236b78";
char key1[32];
for(int i = 0; i < 16; i++){
int q;
sscanf(pass_md5 + i * 2, "%02x", &q);
key1[i] = q;
}
for(int i = 16; i < 32; i ++)
key1[i] = 0;
int iv_size = 16;
NSMutableData *ciphertext_dec_data = [[NSMutableData alloc] initWithBase64EncodedString:rndEncoded options:0];
NSInteger ciphertext_length = ciphertext_dec_data.length;
NSRange iv_dec_range = NSMakeRange(0, iv_size);
NSData *iv_dec_data = [ciphertext_dec_data subdataWithRange:iv_dec_range];
NSRange ciphertext_dec_range = NSMakeRange(iv_size, ciphertext_length - iv_size);
NSData *ciphertext_dec = [ciphertext_dec_data subdataWithRange:ciphertext_dec_range];
NSData *key = [NSData dataWithBytes:key1 length:32];
NSData *iv = iv_dec_data;
NSData *data = ciphertext_dec;
NSMutableData *cipherData = [NSMutableData dataWithLength:32];
size_t outLength;
CCCryptorStatus result
= CCCrypt(kCCDecrypt, // operation, replace with kCCDecrypt to decrypt
kCCAlgorithmAES128, // Same as MCRYPT_RIJNDAEL_256
kCCOptionECBMode , // CBC mode
key1, // key
16, // Since you are using AES256
iv.bytes,// iv
data.bytes, // dataIn
data.length, // dataInLength,
cipherData.mutableBytes, // dataOut
cipherData.length, // dataOutAvailable
&outLength); // dataOutMoved
if (result == kCCSuccess) {
NSString *resultString = [cipherData base64Encoding];
NSLog(@"chiperdata length = %lu", (unsigned long)cipherData.length);
NSLog(@"chiperdata = %@", cipherData);
NSLog(@"result = %@", resultString);
NSLog(@"should be = 78f8aceb24b60fb12990397f52a62067");
NSData *must = [@"78f8aceb24b60fb12990397f52a62067" dataUsingEncoding:4];
NSLog(@"should bytes = %@", must);
} else {
NSLog(@"Crypthor status: %d", result);
}
В консоль выводил все переменные и сравнивал с пхп побайтово, все совпадает до срабатывания CCCrypt.
result = PAsfj3K66m6tLw3utWl/R5h/NbYPoNDw77QqwdZfWQ0=
should be = 78f8aceb24b60fb12990397f52a62067
result bytes = <3c0b1f8f 72baea6e ad2f0dee b5697f47 987f35b6 0fa0d0f0 efb42ac1 d65f590d>
must bytes= <37386638 61636562 32346236 30666231 32393930 33393766 35326136 32303637>
Получаю на выходе:
"PAsfj3K66m6tLw3utWl/R5h/NbYPoNDw77QqwdZfWQ0="
А должно быть:
"78f8aceb24b60fb12990397f52a62067"
В чем ошибка? Подскажите, пожалуйста.