2011-10-21 53 views
3

嘗試在給定API模數和指數的情況下生成RSA公鑰。我在iOS 4.2上使用OpenSSL。使用OpenSSL初始化模數和指數的公鑰使用OpenSSL

手動生成的公鑰是一個選項(見下文),但我不知道如何將在模數

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

基於@詹姆斯評論指數邏輯,我可以寫公共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); 
+0

*「...但是獲得空白私鑰......」* - 'RSA *'可以作爲公鑰和私鑰。您只將公鑰部分提供給'RSA *'。私鑰部分不會奇蹟般地從公鑰部分出現。如果你能做到這一點,那麼大多數(全部?)Integer分解密碼(IFC)都會崩潰。 – jww

回答

3

要做到這一點請確保您有OpenSSL庫鏈接(說明這裏http://code.google.com/p/ios-static-libraries/

一旦鏈接你將有機會獲得幾個BIGNUM轉換器。我把模數爲十六進制使用BN_hex2bn方法節省了十六進制字符串爲「指數」

然後使用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; 

好運創建BIGNUM結構和加密!