У меня серьезные проблемы с функцией CommonCrypto. Существует два существующих приложения для BlackBerry и Windows Mobile, оба используют шифрование Triple-DES с режимом ECB для обмена данными. На любом зашифрованные результаты одинаковы.
Теперь я хочу внедрить шифрование 3DES в наше приложение для iPhone, поэтому я сразу перешел к CommonCrypto: http://www.opensource.apple.com/source/CommonCrypto/CommonCrypto-32207/CommonCrypto/CommonCryptor.h
Я получаю некоторые результаты, если использую режим CBC, но они не соответствуют результатам Java или C#. В любом случае, я хочу использовать режим ECB, но у меня это вообще не работает - появляется ошибка параметра...
Это мой призыв к режиму ECB... Я его немного убрал:
const void *vplainText;
plainTextBufferSize = [@"Hello World!" length];
bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
plainText = (const void *) [@"Hello World!" UTF8String];
NSString *key = @"abcdeabcdeabcdeabcdeabcd";
ccStatus = CCCrypt(kCCEncrypt,
kCCAlgorithm3DES,
kCCOptionECBMode,
key,
kCCKeySize3DES,
nil, // iv, not used with ECB
plainText,
plainTextBufferSize,
(void *)bufferPtr, // output
bufferPtrSize,
&movedBytes);
Это более или менее код отсюда: http://discussions.apple.com/thread.jspa?messageID=9017515 Но, как уже упоминалось, Я получаю ошибку параметра каждый раз...
Когда я использую kCCOptionPKCS7Padding вместо kCCOptionECBMode и устанавливаю один и тот же вектор инициализации в C# и коде iPhone, iPhone дает разные результаты. Есть ли ошибка при получении моего вывода из bufferPtr? В настоящее время я получаю зашифрованные данные таким образом:
NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
result = [[NSString alloc] initWithData:myData encoding:NSISOLatin1StringEncoding];
Кажется, я почти дважды пробовал каждую настройку, разные кодировки и так далее... где моя ошибка?