Подпишете NSData с RSA частен ключ

Изправен съм пред проблем, който от моя страна няма много описание в документацията на Apple.

Трябва да подпиша NSData с RSA частен ключ, който се предоставя от backoffice. Частният ключ се получава под формата на низ.

Как да постигнете това? Не искам да създавам свои собствени двойки ключове, просто искам да използвам този единствен ЧАСТЕН ключ за подписване на 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 официално не поддържа подписване с помощта на string-key (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++, като го изберете в раздела Идентичност и тип ИЛИ променете разширението на изходния файл от .m на . мм - person Roman Slyepko; 03.03.2015
comment
Вече реших проблема, използвайки различен подход, но все пак благодаря за полезната информация. Наздраве =) - person Vladislav Kan; 04.03.2015
comment
@VladislavKan и какъв подход използвахте? Аз съм изправен пред същия проблем - person Jordi Puigdellívol; 24.10.2016