Подпишите NSData закрытым ключом RSA

Я столкнулся с проблемой, которой, с моей стороны, не хватает подробного описания в документации Apple.

Мне нужно подписать NSData закрытым ключом RSA, который предоставляется из бэк-офиса. Закрытый ключ получен в виде строки.

Как этого добиться? Я не хочу создавать свои собственные пары ключей, я просто хочу использовать этот единственный ЧАСТНЫЙ ключ для подписи NSData.

Я нашел несколько решений с использованием OPENSSL, но ни одно из них не работает, и я не могу найти подходящего решения для моей проблемы с собственной библиотекой CommonCrypto.

Фактически, мне нужно воспроизвести фрагмент кода Android:

public static PrivateKey getPrivateKey() throws Exception {
String key = ContentHolder.getInstance(context).getClientPrivateKey();
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(android.util.Base64.decode(key, android.util.Base64.NO_WRAP));
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePrivate(spec);

- возвращает закрытый ключ, который генерируется из строки, хранящейся в базе данных приложения

public String sign(byte[] array) throws SignatureException {
        try {
            Signature sign = Signature.getInstance("SHA1withRSA");
            sign.initSign(privateKey);
            sign.update(array);
            return android.util.Base64.encodeToString(sign.sign(), android.util.Base64.NO_WRAP);
        } catch (Exception ex) {
            throw new SignatureException(ex);
        }
    }

- возвращает массив байтов со знаком в виде строки base64

Как этого добиться в iOS? Я провел много часов в Интернете и пробовал несколько подходов, но ни один из них не увенчался успехом.

Я был бы очень благодарен за любые фрагменты кода, поскольку подсказки типа «CommonCrypto должен сделать это» для меня не работают.

Большое Вам спасибо


person Karol Grülling    schedule 22.10.2014    source источник
comment
возможно, это поможет вам: github.com/nicklockwood/CryptoCoding   -  person Dávid Kaszás    schedule 22.10.2014
comment
@DavidKaszas Это похоже не на RSA, а только на AES.   -  person zaph    schedule 22.10.2014


Ответы (1)


Основная проблема заключается в том, что Apple официально не поддерживает подписание с использованием строкового ключа (https://devforums.apple.com/message/641836#641836). Они настаивают на использовании .p12 и его импорте с помощью SecPKCS12Import.

Отметьте этот ответ: https://stackoverflow.com/a/27945240/4324866

person Roman Slyepko    schedule 14.01.2015
comment
Привет, это нормально, если я включу openSSL с использованием какао-стручков? Если да, то почему мой #include ‹iomanip› выдает ошибку? Пожалуйста, помогите =) - person Vladislav Kan; 18.02.2015
comment
@VladislavKan, чтобы использовать библиотеки C ++ и / или любой другой код C ++, вы должны изменить тип файла исходного файла с Objectice-C на Objective-C ++, выбрав его на вкладке Identity и Type ИЛИ изменив расширение исходного файла с .m на. мм - person Roman Slyepko; 03.03.2015
comment
Я уже решил проблему другим подходом, но все равно спасибо за полезную информацию. Ура =) - person Vladislav Kan; 04.03.2015
comment
@VladislavKan, а какой подход вы использовали? У меня такая же проблема - person Jordi Puigdellívol; 24.10.2016