Расшифровка iOS 3DES ECB
Я пытаюсь расшифровать, используя следующую функцию, но я продолжаю получать одну и ту же зашифрованную строку.
Что было бы причиной этого?
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
const void *vEncryptedText = [data bytes];
size_t encryptedTextBufferSize = [data length];
CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;
bufferPtrSize = (encryptedTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, bufferPtrSize);
const void *vkey = (const void *) [@"123456789012345678901234" UTF8String];
ccStatus = CCCrypt(kCCDecrypt,
kCCAlgorithm3DES,
kCCOptionECBMode | kCCOptionPKCS7Padding,
vkey,
kCCKeySize3DES,
NULL,
vEncryptedText,
encryptedTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
return [myData base64EncodedStringWithOptions:0];
Обновить:
Я изменил данные на:
NSData *data = [[NSData alloc] initWithBase64EncodedString:string options:0];
Все еще не повезло. Я получаю ту же строку вывода, что и входная зашифрованная строка.
Я решил проблему, вернув:
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
1 ответ
Фактически невозможно, чтобы зашифрованные данные были действительной строкой в кодировке UTF-8, зашифрованные данные - это массив или 8-битные байты, которые будут казаться случайными.
Итак, первая строка:NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
это неверно. Если зашифрованные данные действительно являются строкой UTF-8, то они были закодированы, вероятно, в Base64 или шестнадцатеричное.