Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

#include #include #include #include #include #define KEY_LENGTH 2048 #define PUB_EXP 3 #define PRINT_KEYS #define WRITE_TO_FILE int main(void) { size_t pri_len; // Length of private key

#include  #include  #include  #include  #include  #define KEY_LENGTH 2048 #define PUB_EXP 3 #define PRINT_KEYS #define WRITE_TO_FILE int main(void) { size_t pri_len; // Length of private key size_t pub_len; // Length of public key char *pri_key; // Private key char *pub_key; // Public key char msg[KEY_LENGTH/8]; // Message to encrypt char *encrypt = NULL; // Encrypted message char *decrypt = NULL; // Decrypted message char *err; // Buffer for any error messages // Generate key pair printf("Generating RSA (%d bits) keypair...", KEY_LENGTH); fflush(stdout); RSA *keypair = RSA_generate_key(KEY_LENGTH, PUB_EXP, NULL, NULL); // To get the C-string PEM form: BIO *pri = BIO_new(BIO_s_mem()); BIO *pub = BIO_new(BIO_s_mem()); PEM_write_bio_RSAPrivateKey(pri, keypair, NULL, NULL, 0, NULL, NULL); PEM_write_bio_RSAPublicKey(pub, keypair); pri_len = BIO_pending(pri); pub_len = BIO_pending(pub); pri_key = malloc(pri_len + 1); pub_key = malloc(pub_len + 1); BIO_read(pri, pri_key, pri_len); BIO_read(pub, pub_key, pub_len); pri_key[pri_len] = '\0'; pub_key[pub_len] = '\0'; #ifdef PRINT_KEYS printf(" %s %s ", pri_key, pub_key); #endif printf("done. "); // Get the message to encrypt printf("Message to encrypt: "); fgets(msg, KEY_LENGTH-1, stdin); msg[strlen(msg)-1] = '\0'; // Encrypt the message encrypt = malloc(RSA_size(keypair)); int encrypt_len; err = malloc(130); if((encrypt_len = RSA_public_encrypt(strlen(msg)+1, (unsigned char*)msg, (unsigned char*)encrypt, keypair, RSA_PKCS1_OAEP_PADDING)) == -1) { ERR_load_crypto_strings(); ERR_error_string(ERR_get_error(), err); fprintf(stderr, "Error encrypting message: %s ", err); goto free_stuff; } #ifdef WRITE_TO_FILE // Write the encrypted message to a file FILE *out = fopen("out.bin", "w"); fwrite(encrypt, sizeof(*encrypt), RSA_size(keypair), out); fclose(out); printf("Encrypted message written to file. "); free(encrypt); encrypt = NULL; // Read it back printf("Reading back encrypted message and attempting decryption... "); encrypt = malloc(RSA_size(keypair)); out = fopen("out.bin", "r"); fread(encrypt, sizeof(*encrypt), RSA_size(keypair), out); fclose(out); #endif // Decrypt it decrypt = 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 ", err); goto free_stuff; } printf("Decrypted message: %s ", decrypt); free_stuff: RSA_free(keypair); BIO_free_all(pub); BIO_free_all(pri); free(pri_key); free(pub_key); free(encrypt); free(decrypt); free(err); return 0; } 

This is a basic rsa encryption decryption program. I just need the program expanded a little more to where they can allow the User the Option to Encrypt any text file or Decrypt that text file. Please give a detail solution

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Beginning C# 5.0 Databases

Authors: Vidya Vrat Agarwal

2nd Edition

1430242604, 978-1430242604

More Books

Students also viewed these Databases questions

Question

5. Explain the supervisors role in safety.

Answered: 1 week ago

Question

What are the determinants of cash cycle ? Explain

Answered: 1 week ago