Инициализация открытого ключа из модуля и экспоненты с использованием OpenSSL - PullRequest
3 голосов
/ 21 октября 2011

Попытка сгенерировать открытый ключ 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(&rsa->n,szModulus) ;
ret = BN_hex2bn(&rsa->d,szExp) ;
FILE *fp = fopen("/Users/ysi/Desktop/privateKey.pem", "wb"); 
PEM_write_RSAPrivateKey(fp, rsa, NULL, NULL, 0, 0, NULL);

1 Ответ

3 голосов
/ 02 ноября 2011

Для этого убедитесь, что у вас есть связанная библиотека 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;

Удачи!

...