- (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;
}
in diesem Crash: newSize = 800016 datasize = 800001AES128 memcry() Absturz
Wenn ich encrypt machen AES128 für NSData (800001 bytes), Absturz in memcry(), but if the data is smaller
, es funktioniert normal
Könnte mir jemand helfen?
Das sieht wie Ziel-C nicht C. Bitte verwenden Sie das richtige Tag. Außerdem sollten Code-Debugging-Fragen ein [mcve] enthalten. – kaylum
1. Was versuchst du mit 'diff' und' kCCKeySizeAES128' zu erreichen? 2. Wenn 'diff <= 0'' newSize' ist '0' was nicht das ist was du willst. 3. Was hat 'kCCKeySizeAES128' mit der Datenlänge zu tun? 4. Mit dem fehlenden Code '...' ist es schwer zu sagen, wofür der bereitgestellte Code ist. 5. Der Variablenname 'diff' ist nicht sehr beschreibend hinsichtlich seiner Funktion. – zaph