Подтвердить что ты не робот

Шифрование с открытым ключом RSA на iOS

Я пишу приложение iOS для связи с существующим сервером. Сервер генерирует пару ключей RSA (открытый ключ и закрытый ключ) и отправляет открытый ключ клиенту.

Клиент (приложение iOS) должен шифровать ТОЛЬКО открытый ключ и отправляет зашифрованные данные на сервер.

Итак, мне нужна функция Objective-C для шифрования RSA.

Ввод:

  • Обычный текст: привет мир!
  • Открытый ключ:

    -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEChqe80lJLTTkJD3X3Lyd7Fj+
    zuOhDZkjuLNPog3YR20e5JcrdqI9IFzNbACY/GQVhbnbvBqYgyql8DfPCGXpn0+X
    NSxELIUw9Vh32QuhGNr3/TBpechrVeVpFPLwyaYNEk1CawgHCeQqf5uaqiaoBDOT
    qeox88Lc1ld7MsfggQIDAQAB
    -----END PUBLIC KEY-----
    

Процесс:

+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;

Вывод:

uwGuSdCgDxAAN3M5THMrNcec3Fm/Kn+uUk7ty1s70oH0FNTAWz/7FMnEjWZYOtHe37G3D4DjqiWijyUCbRFaz43oVDUfkenj70NWm3tPZcpH8nsWYevc9a1M9GbnNF2jRlami8LLUTZiogypSVUuhcJvBZBOfea9cOonX6BG+vw=

Вопрос:

Как реализовать эту функцию?

+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;

У меня есть digg в течение длительного времени, на SO и Google и в документе Apple. Я узнал, что Apple нужен файл .der для шифрования, а не только открытый ключ.

4b9b3361

Ответ 1

Я отвечу на мой вопрос:

1. создать SecKeyRef со строкой открытого ключа

Мне помогает этот пост: http://blog.flirble.org/2011/01/05/rsa-public-key-openssl-ios/#its-all-in-the-format

Это привело к моему коду: https://github.com/ideawu/Objective-C-RSA/blob/master/RSA.m#L34

2. использовать SecKeyRef для шифрования входных данных

Используйте Apple SecKeyEncrypt (https://developer.apple.com/library/ios/documentation/Security/Reference/certifkeytrustservices/index.html)

3. полный код на github

https://github.com/ideawu/Objective-C-RSA