Answered step by step
Verified Expert Solution
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
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started