2012-11-16 49 views
2

我一直在努力奮鬥多日,無法在互聯網上找到任何準確的示例/教程,所以現在我在這裏尋求幫助。OpenSSL RSA Keypair在C或Obj-C中使用X509和PKCS#8編碼

我有一個創建RSA密鑰對的Java應用程序。此密鑰對用於加密和解密對稱密鑰。 (但首先要測試我想用一個簡單的文本字符串)。在生成密鑰對之後,密鑰被編碼。

PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(pbKey)); 

PKCS8EncodedKeySpec ks = new PKCS8EncodedKeySpec(pvBytes); 

現在我創建iOS上的應用程序。我想在使用OpenSSL的iOS(C或Objective-C)中做同樣的事情。

有人可以幫助我嗎?

我創建這樣

RSA_generate_key_ex(rsa, modulus, e, NULL); 

回答

0

鍵基本上,你有什麼存在的私有密鑰(KS)的PKCS#8編碼。即原始ASN.1。

我假設你寫出了原始的,編碼的(Java asymmetric encryption: preferred way to store public/private keys, Decrypted string not the same as pre encrypted string)。

因此,假設rsa被填充;和 'ENC' 是

const EVP_CIPHER *enc=NULL; 

或更可能

const EVP_CIPHER *enc=EVP_aes_XXX_cbc(); 

其中XXX是像128位你會再調用PEM_write_bio_RSAPrivateKey的東西,如:

PW_CB_DATA cb_data; 
    cb_data.password = passout; 
    cb_data.prompt_info = outfile; 

    BIO_set_fp(out,stdout,BIO_NOCLOSE); 

    if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0, 
      (pem_password_cb *)password_callback,&cb_data)) 
      goto err; 

這應該是大致它。代碼可以從任何openssl源代碼分發中的apps/genrsa.c中解除。