Шифрование Дешифрование AES/ECB/NoPadding

Есть ли какой-либо метод дешифрования/дешифрования строки в iOS по этому алгоритму? все, что я знаю, что в java этот класс: javax.crypto.Cipher используется для этой цели


person Skander Fathallah    schedule 02.09.2016    source источник
comment
Да, есть .   -  person Artjom B.    schedule 02.09.2016
comment
Никогда не используйте режим ECB. Это детерминировано и, следовательно, не является семантически безопасным. Вы должны как минимум использовать рандомизированный режим, такой как CBC или CTR. Лучше аутентифицировать ваши зашифрованные тексты, чтобы такие атаки, как атака оракула заполнения, были невозможны. Это можно сделать с помощью режимов аутентификации, таких как GCM или EAX, или с помощью схемы зашифровать-затем-MAC.   -  person Artjom B.    schedule 02.09.2016


Ответы (2)


Apple Common Crypto поддерживает AES, режим ECB (используйте режим CBC) и отсутствие заполнения. Если вы не используете заполнение, длина входных данных должна быть кратна размеру блока AES (16 байт), стандартное заполнение равно PKCS#7 (урожденная PKCS#5).

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

Простое использование шифрования не обеспечивает безопасности, его необходимо правильно использовать в сочетании с другими криптографическими примитивами.

person zaph    schedule 03.09.2016

Common Crpto от Apple поддерживает его. Импортируйте CommonCryptor.h и CCCryptorStatus «CCCrypt» — это то, что вам нужно.

Вот пример:

+ (NSData *)encryptDataWithAESECB:(NSData *)data
                              key:(NSData *) key
                            error:(NSError **)error {
    size_t outLength;

    int cipherLen = (int)(data.length/kAlgorithmBlockSize + 1)*kAlgorithmBlockSize;
    NSMutableData *cipherData = [NSMutableData dataWithLength:cipherLen];
    NSData *newData = [self addPaddingBeforeEncryptWithAESECB:data];

    CCCryptorStatus result = CCCrypt(kCCEncrypt, // operation
                                     kAlgorithm, // Algorithm
                                     kCCOptionECBMode, // Mode
                                     key.bytes, // key
                                     key.length, // keylength
                                     0,// iv
                                     newData.bytes, // dataIn
                                     newData.length, // dataInLength,
                                     cipherData.mutableBytes, // dataOut
                                     cipherData.length, // dataOutAvailable
                                     &outLength); // dataOutMoved
    if (result == kCCSuccess) {
        cipherData.length = outLength;
    }else {
        if (error) {
            *error = [NSError errorWithDomain:kRNCryptManagerErrorDomain code:result userInfo:nil];
        }
        return nil;
    }
    return cipherData;
}

Пожалуйста, обратитесь к моему сообщению здесь для получения дополнительной информации: AES ECB iOS Encrypt

person Joanne    schedule 01.02.2018