Separating public and private keys from RSA keypair variable

后端 未结 4 2016
陌清茗
陌清茗 2020-12-18 13:04

As the title says, I have some code that generates a pair of RSA keys. I want to split them apart and use them individually to encrypt/decrypt, rather than use the variable

4条回答
  •  爱一瞬间的悲伤
    2020-12-18 13:47

    I've found a solution to my question among other Stack-Overflow posts and namely Reading Public/Private Key from Memory with OpenSSL

    The answer i was looking for is answered by @SquareRootOfTwentyThree is his last line of code,

    After extracting the Public key into a BIO variable called pub:

    PEM_write_bio_RSAPublicKey(pub, keypair);
    

    i can send the variable pub across the network, and after it reaches the other side create a RSA variable and put pub inside it:

    SOLUTION:

    RSA *keypair2 = NULL; 
    PEM_read_bio_RSAPublicKey( pub, &keypair2, NULL, NULL);
    

    After i've done this i can successfully encrypt the message as usual, using keypair2:

    ENCRYPTION:

    encrypt = (char*)malloc(RSA_size(keypair));
    int encrypt_len;
    err = (char*)malloc(130);
    if((encrypt_len = RSA_public_encrypt(strlen(msg)+1, (unsigned char*)msg,
            (unsigned char*)encrypt, keypair2 ,RSA_PKCS1_OAEP_PADDING)) == -1) {
        ERR_load_crypto_strings();
        ERR_error_string(ERR_get_error(), err);
        fprintf(stderr, "Error encrypting message: %s\n", err);
    }
    

    I can then send this encrypt variable back to the first machine, and decrypt it as usual, using my original keypair, without having to send it over the network.

    DECRYPTION:

    decrypt = (char*)malloc(encrypt_len);
    if(RSA_private_decrypt(encrypt_len, (unsigned char*)encrypt, (unsigned char*)decrypt,
            keypair, RSA_PKCS1_OAEP_PADDING) == -1) {
        ERR_load_crypto_strings();
        ERR_error_string(ERR_get_error(), err);
        fprintf(stderr, "Error decrypting message: %s\n", err);
    }
    

    Thank you everyone for contributing to this post!!!

提交回复
热议问题