Intereting Posts
Текстовое поле css внутренняя тень на ios UIWebView UISearchBar неправильно анимируется под навигационной панелью Редактор карт для внутренней навигации UICollectionView мерцает тонкой «прокруткой» линий между ячейками при прокрутке ios metal: несколько вызовов ядра в одном командном буфере Показ мастера в UISplitViewController по умолчанию с использованием быстрой shouldAutorotateToInterfaceOrientation вызывается несколько раз – это нормально? Не удалось создать приложение для распространения в Xcode Каков более эффективный способ сортировки и фильтрации отношений Core Data? Необъяснимое предупреждение «захватить себя» Кнопка «Глобальная кнопка входа в приложение» Добавьте несколько UILabels друг под друга с каждой меткой, имеющей переменные строки Фотоэффекты, такие как instagram iCloud Document Picker с пользовательским интерфейсом UTI Создание диалога формы с помощью SiriKit?

Шифрование AES в iOS и Java

Я новичок в этом шифровании. Я создаю приложение для android и iOS, в которых я должен шифровать (используя AES Encryprtion) файл на стороне сервера и расшифровывать на стороне клиента как в iOS, так и в Android-приложении. Я получил код в Интернете, чтобы выполнить шифрование и расшифровку AES для Android и iOS, они работают нормально. На стороне сервера они используют java. Но проблема в Java Encrypted File не может быть расшифрована программой iOS, даже я получил тот же файлize, но файл не в правильном формате. Я отправил код ниже …

Шифрование и расшифровка Java:

public static byte[] encrypt(byte[] data, byte[] key, byte[] ivs) { try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES"); byte[] finalIvs = new byte[16]; int len = ivs.length > 16 ? 16 : ivs.length; System.arraycopy(ivs, 0, finalIvs, 0, len); IvParameterSpec ivps = new IvParameterSpec(finalIvs); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivps); return cipher.doFinal(data); } catch (Exception e) { e.printStackTrace(); } return null; } public static byte[] decrypt(byte[] data, byte[] key, byte[] ivs) { try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES"); byte[] finalIvs = new byte[16]; int len = ivs.length > 16 ? 16 : ivs.length; System.arraycopy(ivs, 0, finalIvs, 0, len); IvParameterSpec ivps = new IvParameterSpec(finalIvs); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivps); return cipher.doFinal(data); } catch (Exception e) { e.printStackTrace(); } return null; } 

Код iOS для расшифровки:

 - (NSData *) decryptFile:(NSString *)key withData:(NSData *)fileData { char keyPtr[kCCKeySizeAES128+1]; bzero(keyPtr, sizeof(keyPtr)); NSString* iv = @"12345678"; [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [fileData length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesDecrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,keyPtr, kCCKeySizeAES128, iv /* initialization vector (optional) */, [fileData bytes], dataLength, /* input */ buffer, bufferSize, /* output */ &numBytesDecrypted); if (cryptStatus == kCCSuccess) { //the returned NSData takes ownership of the buffer and will free it on deallocation return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; } free(buffer); //free the buffer; return nil; } 

Дайте мне какое-либо решение или предложение по этой проблеме

Проблема связана с параметром iv .

1) Вы передаете NSString* как iv . Вероятно, вы захотите передать фактические байты.

2) Длина iv должна быть 16 (в данном случае) в соответствии с api docs CCCrypt. См. Ссылку ниже:

http://www.opensource.apple.com/source/CommonCrypto/CommonCrypto-36064/CommonCrypto/CommonCryptor.h