Расшифровка строки в кодировке Base64 с помощью AES приводит к состоянию ошибки 4301 (слишком маленький буфер)

Я хотел бы расшифровать AES зашифрованная строка, которая Base64 закодировано в Objective-C:

Это мой код:

NSString *base64String = @"RwH0KBSRjFKJQYGsCze0";
NSData *base64Data = [[NSData alloc] initWithBase64EncodedString:
     base64String options:0];

char * key = "shouldbe16chars.";
NSUInteger dataLength = [base64Data length];
uint8_t unencryptedData[dataLength + kCCKeySizeAES128];
size_t unencryptedLength;

CCCryptorStatus status = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
    0 , key,kCCKeySizeAES128, NULL, [base64Data bytes], 
    [base64Data length], unencryptedData, dataLength, 
    &unencryptedLength);

NSString *output = [[NSString alloc] initWithBytes:
     unencryptedData length:unencryptedLength 
     encoding:NSUTF8StringEncoding];

NSLog(@"status: %d output: %@",status, output);

При запуске кода результат: Status = -4301, output = null

Согласно документации, статус 4301 = "буфер слишком маленький"

При отладке моего кода переменные устанавливаются следующим образом:

base64Data = 4701f428 14918c52 894181ac 0b37b4
dataLength = 15 bytes
unencryptedLength = 0
unencryptedData = {}

Ошибка возникает только когда опция kCCOptionPKCS7Padding устанавливается, если установлено 0, статус = 0, выход = {}.

Я проверил много примеров кода на SO, но не нашел ничего плохого в моем коде.

У вас есть идеи о том, что может быть не так с моим кодом?

Кстати: base64string Я использую в этом примере код был создан в JavaScript с использованием этой инфраструктуры с открытым исходным кодом: http://www.movable-type.co.uk/scripts/aes.html. Я не знаю, помогает ли эта информация.

1 ответ

Ваш предпоследний аргумент в CCCrypt должен быть dataOutAvailable. Вы передаете dataLength, который выглядит как длина inData (которую вы уже правильно передали в качестве аргумента).

Другие вопросы по тегам