Расшифровка AES в Objective C

Я новичок в шифровании

Проблема:

Мне дан набор зашифрованных строк, и мне нужно их расшифровать, чтобы показать пользователю мобильного клиента. Для Android он отлично расшифровывает, и я использую следующий метод «расшифровать». Для iOS у меня много проблем с переводом этого java-метода на Objective C. Я попытался использовать NSData + CommonCrypto, RNCryptor. Оба они вернут некоторые расшифрованные данные, однако при преобразовании расшифрованных данных в строку они всегда будут нулевыми.

Цель:

Переведите метод java decrypt в Objective C (расшифруйте строку в Objective C с помощью секретного ключа)

Приветствуются любые предложения, комментарии, мнения, псевдокод. Благодарность

Метод расшифровки Android

public static String decrypt(String message){
    try {
        Cipher c = Cipher.getInstance("AES");
        SecretKeySpec key = new SecretKeySpec(secrKey.getBytes(), "AES");
        c.init(Cipher.DECRYPT_MODE, key);
        byte[] decordedValue = Base64.decode(message.getBytes(), Base64.DEFAULT);
        byte[] decValue = c.doFinal(decordedValue);
        String decryptedValue = new String(decValue);
        String decoded = new String(Base64.decode(decryptedValue, Base64.DEFAULT));
        return decoded;
    }catch(Exception e){
        return null;
    }
}

person xiaowoo    schedule 06.06.2015    source источник
comment
Вам необходимо предоставить пример ввода и вывода вместе с режимом, типом заполнения, если он есть, и iv, если режим CBC и любой другой. Добавьте к вопросу шестнадцатеричные дубли этих входов. Также предоставьте ссылки на библиотеки шифрования, если некоторые из них неизвестны. Многие библиотеки шифрования имеют внутренние значения по умолчанию, и многие также не предоставляют информацию о них.   -  person zaph    schedule 06.06.2015
comment
Метод Java getInstance должен предоставлять всю необходимую информацию и не полагаться на значения по умолчанию. например: AES / CBC / PKCS5Padding (128), AES / ECB / NoPadding (128) или некоторые другие комбинации. Со спецификацией AES я бы предположил: режим ECB (действительно плохой выбор), PKCS5Padding и длина ключа на основе предоставленного ключа с добавлением нуля по мере необходимости. См. Документы Class Cipher.   -  person zaph    schedule 06.06.2015
comment
Обновите свой вопрос кодом Objective-C, чтобы люди могли указать на вашу проблему.   -  person rmaddy    schedule 06.06.2015
comment
@zaph, ваш второй комментарий решил мою проблему. AES / CBC / PKCS5Padding (128). Спасибо ^^.   -  person xiaowoo    schedule 07.06.2015


Ответы (1)


Метод Java getInstance должен предоставлять всю необходимую информацию и не полагаться на значения по умолчанию. Например: «AES / CBC / PKCS5Padding (128)», «AES / ECB / NoPadding (128)» или другая комбинация.

Со спецификацией «AES» я бы предположил: режим ECB (действительно плохой выбор), PKCS5Padding и длина ключа на основе предоставленного ключа с добавлением нуля по мере необходимости.

См. Документы Class Cipher.

person zaph    schedule 07.06.2015