ios — AES256 зашифровывается в цели C для машинного с php rijndael_256 ECB_MODE

Я пытаюсь зашифровать 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;
}

1

Решение

Вы можете попробовать навсегда, учитывая алгоритм шифрования, который вы используете. Вы используете MCRYPT_RIJNDAEL_256, который является блочным шифром Rijndael с 256 размер блока. Вы должны использовать MCRYPT_RIJNDAEL_128 (иначе известный как AES), а затем выполните PKCS # 7 расправляет себя.

Вы также должны точно указать правильное количество байтов ключа, которое должно быть 16, 24 или 32 байта для AES. И ключевые байты, очевидно, должны совпадать с теми, которые вы используете в своем коде C #.


Если вы не можете изменить код сервера, вы должны сделать / скомпилировать mcrypt для IOS и реализовать те же функции для этого конкретного API. По крайней мере, это будет совместимо. К сожалению, похоже, вам придется сделай портирование сам.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]