Created
March 9, 2022 08:20
-
-
Save chankruze/fa99385233db2e306bfa95f754ac35c9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Author: chankruze ([email protected]) | |
Created: Wed Mar 09 2022 10:06:36 GMT+0530 (India Standard Time) | |
Copyright (c) geekofia 2022 and beyond | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#define MAX_TEXT_LEN 100 | |
#define MAX_KEY_LEN 10 | |
// #define printld(x) printf("%ld\n", x) | |
// #define printd(x) printf("%d\n", x) | |
// #define what_char(x) printf("c = %c, ord(c) = %d\n", x, ord(x)) | |
int ord(char c) { | |
return c; | |
} | |
char chr(int x) { | |
return x; | |
} | |
char* encrypt(char* plain_text, char* xor_key) { | |
// length of plain text | |
size_t len_plain_text = strlen(plain_text); | |
// length of key | |
size_t len_xor_key = strlen(xor_key); | |
// empty character array of encrypted text | |
char* encrypted = malloc(len_plain_text); | |
// loop over each character in plain text | |
for (size_t i = 0; i < len_plain_text; i++) { | |
// xor each character's int with key's correspondence character's int | |
char x = chr(ord(plain_text[i]) ^ ord(xor_key[i % len_xor_key])); | |
// what_char(x); | |
encrypted[i] = x; | |
} | |
return encrypted; | |
} | |
char* decrypt(char* cipher_text, char* xor_key) { | |
// length of cipher text | |
size_t len_cipher_text = strlen(cipher_text); | |
// length of key | |
size_t len_xor_key = strlen(xor_key); | |
// empty character array of cipher text | |
char* decrypted = malloc(len_cipher_text); | |
// loop over each character in cipher text | |
for (size_t i = 0; i < len_cipher_text; i++) { | |
// xor each character's int with key's correspondence character's int | |
char x = chr(ord(cipher_text[i]) ^ ord(xor_key[i % len_xor_key])); | |
// what_char(x); | |
decrypted[i] = x; | |
} | |
return decrypted; | |
} | |
int main() { | |
// plain text user input | |
char plain_text[MAX_TEXT_LEN]; | |
scanf("%s", plain_text); | |
// xor key | |
char xor_key[MAX_KEY_LEN]; | |
scanf("%s", xor_key); | |
char* encrypted = encrypt(plain_text, xor_key); | |
char* decrypted = decrypt(encrypted, xor_key); | |
// ui | |
printf("original = %s\n", plain_text); | |
printf("encrypted = %s\n", encrypted); | |
printf("decrypted = %s\n", decrypted); | |
// cleanup | |
free(encrypted); | |
free(decrypted); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment