Я пытаюсь зашифровать JSON в AES256 в цель C для отправки на один сервер и PHP расшифровать его, используя следующую строку:
MCRYPT_DECRYPT (MCRYPT_RIJNDAEL_256, $ key, base64_decode ($ ha), MCRYPT_MODE_ECB, NULL));
На поиски и тестирование ушло несколько дней, а я не получил результатов. Код, который я использую, это:
- (NSString *)AES256EncryptData:(NSData *) datos {
//NSData * datos = [json dataUsingEncoding:NSUTF8StringEncoding];
UIApplication *aplicacion = [UIApplication sharedApplication];
AppDelegate *delegate = (AppDelegate *) aplicacion.delegate;
char keyPtr[kCCKeySizeAES256+1];
bzero(keyPtr, sizeof(keyPtr));
[delegate.appKey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding ];
NSUInteger dataLength = [datos length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);size_t numBytesEncrypted;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
kCCOptionECBMode + kCCOptionPKCS7Padding,
keyPtr,
kCCKeySizeAES256,
NULL,
[datos bytes],
[datos length],
buffer,
bufferSize,
&numBytesEncrypted);if (cryptStatus == kCCSuccess) {
NSData *returnData = [[NSData alloc] initWithBytes:buffer length:numBytesEncrypted];
return [returnData base64EncodedStringWithOptions:0];
}
free(buffer);
return nil;
}
Вы можете попробовать навсегда, учитывая алгоритм шифрования, который вы используете. Вы используете MCRYPT_RIJNDAEL_256
, который является блочным шифром Rijndael с 256 размер блока. Вы должны использовать MCRYPT_RIJNDAEL_128
(иначе известный как AES), а затем выполните PKCS # 7 расправляет себя.
Вы также должны точно указать правильное количество байтов ключа, которое должно быть 16, 24 или 32 байта для AES. И ключевые байты, очевидно, должны совпадать с теми, которые вы используете в своем коде C #.
Если вы не можете изменить код сервера, вы должны сделать / скомпилировать mcrypt для IOS и реализовать те же функции для этого конкретного API. По крайней мере, это будет совместимо. К сожалению, похоже, вам придется сделай портирование сам.
Других решений пока нет …