Мне нужна помощь в этом расшифровке 3DES. Я создал некоторый код для расшифровки, но я не могу заставить его работать так, как он должен. Это первый раз, когда я играю с помощью шифрования, и я не знаю, что именно я делаю неправильно здесь.ios 3DES шифрование/дешифрование CBC
Я получаю ключ для дешифрования с сервера (это примерное значение для ключа: 0F7BC98767FF9A01F2B2AD1CD644AD33 - это шестнадцатеричное представление случайных сгенерированных байтов).
это метод, который я использую, чтобы расшифровать сообщение:
-(NSString*)doCipher:(NSString*)message key:(NSString*)key operation:(CCOperation)encryptOrDecrypt {
const void *messageData;
size_t messageBufferSize;
if (encryptOrDecrypt == kCCDecrypt){
NSData *messageEncryptData= [NSData dataWithBase64EncodedString:message];
messageBufferSize= [messageEncryptData length];
messageData= [messageEncryptData bytes];
}
else{
messageBufferSize= message.length;
messageData = [[[message dataUsingEncoding: NSUTF8StringEncoding]mutableCopy] bytes];
}
CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;
bufferPtrSize = (messageBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
bufferPtr = malloc(bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, bufferPtrSize);
uint8_t iv[kCCBlockSize3DES];
memset((void *) iv, 0x0, (size_t) sizeof(iv));
NSData *keyData = [[key dataUsingEncoding:NSUTF8StringEncoding]mutableCopy];
ccStatus = CCCrypt(encryptOrDecrypt,
kCCAlgorithm3DES,
kCCOptionPKCS7Padding & kCCModeCBC,
(const void *)[keyData bytes],
kCCKeySize3DES,
iv,
messageData,
messageBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
if (ccStatus == kCCParamError) return @"PARAM ERROR";
else if (ccStatus == kCCBufferTooSmall) return @"BUFFER TOO SMALL";
else if (ccStatus == kCCMemoryFailure) return @"MEMORY FAILURE";
else if (ccStatus == kCCAlignmentError) return @"ALIGNMENT";
else if (ccStatus == kCCDecodeError) return @"DECODE ERROR";
else if (ccStatus == kCCUnimplemented) return @"UNIMPLEMENTED";
NSLog(@"bufferPtr: %s", bufferPtr);
NSString *s = [[NSString alloc] initWithFormat:@"%s", bufferPtr];
return s;
}
- EDIT --- это вывод, который я получаю от метода:
BufferPtr: A»ÕÏÁU
--- EDIT 2 ----- я установил длину ключа, чтобы быть 24 байт длиной, но теперь конечный результат пустая строка
Есть ли опция 'kCCKeySize2DES'? Ваш ключ имеет размер 16 байт. В противном случае скопируйте первые 8 байтов в ключ и соедините их до конца ключа, чтобы вы создали эквивалентный 24-байтовый ключ 3DES ABC для вашего ключа 2DES ABA. –
Привет? Это работает? У меня нет времени выполнения IOS здесь ... –
Мы зафиксировали длину ключа, но у меня все еще есть проблема – tester777