2

これは私が知っていることです:

RSA 公開鍵と秘密鍵の生成

RSA *pRSA      = NULL;
EVP_PKEY* pKey = NULL;
pRSA = RSA_generate_key(2048,RSA_3,gen_callback,NULL);
pKey = EVP_PKEY_new();
if(pRSA && pKey && EVP_PKEY_assign_RSA(pKey,pRSA))
{
    /* pKey owns pRSA from now */
    if(RSA_check_key(pRSA) <= 0)
    {
        fprintf(stderr,"RSA_check_key failed.\n");
        EVP_PKEY_free(pKey);
        pKey = NULL;
    }
}

キー (EVP_KEY) を unsigned char に変換して、ファイルに保存できるようにします。

注:PEMファイルへの書き込みと読み取りの方法は知っていますが、他の多くの理由でキーを独自のファイル形式に保存できるように実装したいと考えています。

//Convert to public key

int pkeyLen;
unsigned char *ucBuf, *uctempBuf;
pkeyLen = i2d_PublicKey(pKey, NULL);
ucBuf = (unsigned char *)malloc(pkeyLen+1);
uctempBuf = ucBuf;
i2d_PublicKey(pKey, &uctempBuf);

//Convert to Private Key

int pkeyLen2;
unsigned char *ucBuf2, *uctempBuf2;
pkeyLen2 = i2d_PrivateKey(pKey, NULL);
ucBuf2 = (unsigned char *)malloc(pkeyLen2+1);
uctempBuf2 = ucBuf2;
i2d_PrivateKey(pKey, &uctempBuf2);

RSA を使用してメッセージを暗号化する

(encrypt_len2 = RSA_public_encrypt(strlen(msg),msg,(unsigned char*)encrypt2,pRSA, RSA_PKCS1_OAEP_PADDING)

unsigned char を EVP に戻す方法を知っています: d2i_PublicKey & d2i_PrivateKey

しかし、これは私が知らないことであり、誰かがそうすることを望んでいます:

EVP_KEY (パブリック & プライベート) を RSA 構造に変換するにはどうすればよいですか?

(例:RSA_generate_key を使用した後に返される RSA *pRSA)?

4

1 に答える 1

0

最後に私の問題の解決策を見つけました。うまくいけば、これは私と同じ問題に直面している人々の助けになります.

char *ct = "This the clear text";
unsigned char *buf;   
unsigned char *buf2;
int lenss;
/* No error checking */
    buf =(unsigned char*) malloc(EVP_PKEY_size(rsaPubKey));
    buf2 =(unsigned char*) malloc(EVP_PKEY_size(rsaPubKey));

lenss = RSA_public_encrypt(strlen(ct)+1,(unsigned char*) ct, buf, rsaPubKey->pkey.rsa,RSA_PKCS1_PADDING);

if (lenss != EVP_PKEY_size(rsaPubKey))
{
    fprintf(stderr,"Error: ciphertext should match length of key\n");
    exit(1);
}

RSA_private_decrypt(lenss, buf, buf2, rsaPrivKey->pkey.rsa,RSA_PKCS1_PADDING);

printf("%s\n", buf2);

openssl サンプル ディレクトリにあるコードの 1 つから私の解決策を見つけました。:)

于 2013-02-24T16:29:46.393 に答える