#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;
Удачи!