- (NSData *)kd_AES128EncryptWithKey:(NSString *)key {
if (key.length == 0) {
return nil;
}
char keyPtr[kCCKeySizeAES128 + 1];
memset(keyPtr, 0, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
int diff = kCCKeySizeAES128 - (dataLength % kCCKeySizeAES128);
NSUInteger newSize = 0;
if (diff > 0) {
newSize = dataLength + diff;
}
char dataPtr[newSize];
memcpy(dataPtr, [self bytes], [self length]); // crash EXC_BAD_ACCESS
...
free(buffer);
return nil;
}
в этой аварии: NewSize = 800016 DataSize = 800001AES128 memcry() аварии
Когда я сделать AES128 шифрования для NSData (800001 байт), сбой в memcry(), but if the data is smaller
, это работает нормальный
Помогло ли мне кто-нибудь?
Это похоже на объектив-C, а не на C. Пожалуйста, используйте правильный тег. Кроме того, вопросы отладки кода должны включать в себя [mcve]. – kaylum
1. Что вы пытаетесь выполнить с помощью 'diff' и' kCCKeySizeAES128'? 2. Если 'diff <= 0'' newSize' '' '' '', что вы не хотите. 3. Что делает 'kCCKeySizeAES128' связано с длиной данных? 4. С отсутствующим кодом '...' трудно сказать, что все предоставленные коды предназначены для. 5. Имя переменной 'diff' не очень описывает ее функцию. – zaph