Инициализировать открытый ключ из модуля и экспоненты с помощью OpenSSL

#objective-c #encryption #openssl #rsa

#цель-c #шифрование #openssl #rsa

Вопрос:

Попытка сгенерировать открытый ключ RSA с учетом модуля API и экспоненты. Я использую OpenSSL на iOS 4.2.

Генерация открытого ключа вручную — это вариант (см. Ниже), однако я не уверен, как включить логику экспоненты в модуль

 -----BEGIN PUBLIC KEY-----
Modulus from API
-----END PUBLIC KEY-----
 

Основываясь на комментариях @James, я могу написать открытый pem, но получаю пустой закрытый ключ. Вот мой код:

 char szModulus = "1162" ;
char *szExp = "827655" ;
RSA* rsa = RSA_new();
int ret = BN_hex2bn(amp;rsa->n,szModulus) ;
ret = BN_hex2bn(amp;rsa->d,szExp) ;
FILE *fp = fopen("/Users/ysi/Desktop/privateKey.pem", "wb"); 
PEM_write_RSAPrivateKey(fp, rsa, NULL, NULL, 0, 0, NULL);
 

Комментарии:

1. «… но получение пустого закрытого ключа …» RSA * может служить как открытым, так и закрытым ключом. Вы предоставили только части открытого ключа для RSA * . Части закрытого ключа волшебным образом не появляются из части открытого ключа. Если бы вы могли это сделать, то большинство (все?) Криптография с целочисленной факторизацией (IFC) рухнет.

Ответ №1:

Для этого убедитесь, что у вас есть связанная библиотека OpenSSL (инструкции здесь http://code.google.com/p/ios-static-libraries /)

После подключения у вас будет доступ к нескольким конвертерам BIGNUM. Я превратил модуль в шестнадцатеричный, используя метод BN_hex2bn, сохранив шестнадцатеричную строку в ‘экспоненту’

Затем создайте структуру BIGNUM и зашифруйте с помощью RSA_public_encrypt

 RSA *rsa = NULL;

rsa->n = BN_new();
BN_copy(rsa->n,modulus);   
rsa->e = BN_new();
BN_copy(rsa->e,exponent);     
rsa->iqmp=NULL;
rsa->d=NULL;
rsa->p=NULL;
rsa->q=NULL;
 

Удачи!