2014-10-22 3 views
1

У меня возникает проблема, которая с моей стороны не имеет большого количества описания в документации на яблоки.Знак NSData с закрытым ключом RSA

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

Как достичь этого? Я не хочу создавать свои собственные пары ключей, я просто хочу использовать этот единственный ключ PRIVATE для подписи 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 строки

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

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

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

+0

может быть, это поможет вам: https://github.com/nicklockwood/CryptoCoding –

+0

@DavidKaszas Это не похоже на покрытие RSA, только AES. – zaph

ответ

0

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

Проверить этот ответ: https://stackoverflow.com/a/27945240/4324866

+0

Привет, это нормально, если я включил openSSL, используя какао-стручки? Если да, то почему мой #include дает мне ошибку? Пожалуйста, Help =) –

+1

@ VladislavKan, чтобы использовать библиотеки C++ и/или любой другой код на C++, вы должны изменить тип файла вашего исходного файла с «Objectice-C» на «Objective-C++», выбрав его в «Identity and Type» "tab OR изменить расширение исходного файла с .m на .mm –

+0

Я уже решил проблему, используя другой подход, но в любом случае спасибо за полезную информацию. Cheers =) –

Смежные вопросы