Ios decrypt base64 закодированная строка с использованием des ecb

Я пытаюсь расшифровать строку, которая была сначала зашифрована с помощью des в режиме ecb, а затем закодирована в base64.

Это мой код:

+ (NSString *)decrypt:(NSString *)encryptedText
{
 NSString *key = @"12345678";
 NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:encryptedText options:0];
 size_t numBytesDecrypted = 0;
 size_t bufferSize = [decodedData length] + kCCBlockSizeDES;
 void *buffer = malloc(bufferSize);
 char keyPtr[kCCKeySizeDES+1]; // room for terminator (unused)
 bzero(keyPtr, sizeof(keyPtr));
 [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];


 CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
 kCCAlgorithmDES,
 kCCOptionPKCS7Padding | kCCOptionECBMode,
 keyPtr,
 kCCKeySizeAES256,
 NULL /* initialization vector (optional) */,
 [decodedData bytes], [decodedData length], /* input */
 buffer, bufferSize, /* output */
 &numBytesDecrypted);

 NSData *val = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
 return [[NSString alloc] initWithData:val encoding:NSUTF8StringEncoding];
}

Однако я получаю нулевую строку в ответ... любые идеи?

1 ответ

Вы используете DES, но указываете размер ключа как: kCCKeySizeAES256 в вызове: CCCrypt.

С этим кодом с точки зрения безопасности так много чего не получается, не используйте это в реальном приложении. Это уже не лучшая практика. Помимо прочего, пароль должен быть преобразован в ключ с помощью функции определения ключа на основе пароля, такой как PBKDF2. Также использование DES и ECB - это недостатки.

licensed under cc by-sa 3.0 with attribution.