Как мне преобразовать эту функцию дешифрования из PHP в Objective C?

В настоящее время я работаю над проектом, который требует от меня расшифровки данных. У меня работает php-версия и я хочу перенести ее на свой проект iOS.

Это рабочая функция php:

public function decryptCBC($data, $key, $iv) {
// Decode the key and IV.
$iv = base64_decode($iv);
$key = base64_decode($key);
// Decrypt the data.
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
$padding = ord($data[strlen($data) - 1]);
return substr($data, 0, -$padding);
}

В Objective C это то, что я пробовал, но пока безуспешно

- (NSData *) decryptCBC:(NSData*)data WithKey:(NSString *)key andIv:(NSString *)iv {

NSData *keyData = [[NSData alloc] initWithBase64EncodedString:key options:0];
NSData *ivData = [[NSData alloc] initWithBase64EncodedString:iv options:0];

key = [[NSString alloc] initWithData:keyData encoding:NSASCIIStringEncoding];

char keyPtr[kCCKeySizeAES128+1];
bzero(keyPtr, sizeof(keyPtr)); // fill with 0s - padding

[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

NSUInteger dataLength = data.length;

size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);

size_t numBytesEncrypted = 0;

CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 0 ,
keyPtr, kCCKeySizeAES128,
[ivData bytes],
[data bytes], dataLength,
buffer, bufferSize,
&numBytesEncrypted);

if (cryptStatus == kCCSuccess) {
//the returned NSData takes ownership of the buffer and will free it on deallocation

NSData *response = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted-1];
return response;
}

free(buffer); //free the buffer;
return nil;
}

Если кто-нибудь знает, что я делаю неправильно, я буду признателен за ответ.

Спасибо
/Джонатан

0

Решение

Если у вас есть именно так один и тот же вход и входы именно так нужной длины вы получите именно так тот же результат.

Одна проблема: один и тот же отступ должен использоваться для каждого, но вы не используете заполнение в расшифровке, вы делаете что-то внешнее для заполнения.

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector