diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/org/blog/c/cherry.org | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/org/blog/c/cherry.org b/src/org/blog/c/cherry.org new file mode 100644 index 0000000..324aa4c --- /dev/null +++ b/src/org/blog/c/cherry.org @@ -0,0 +1,85 @@ +#+title: Reviving Caesar with a Cherry-flavored Crystal +#+AUTHOR: Crystal & Sloth +#+OPTIONS: ^:{} +#+OPTIONS: num:nil +#+EXPORT_FILE_NAME: ../../../../blog/c/cherry.html +#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../../src/css/colors.css"/> +#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../../src/css/style.css"/> +#+OPTIONS: html-style:nil +#+OPTIONS: toc:nil +#+HTML_HEAD: <link rel="icon" type="image/x-icon" href="../../../favicon.png"> +#+HTML_LINK_HOME: https://crystal.tilde.institute/ + +* What ?... +That is probably your reaction reading this title, and no, this isn't a randomly generated sentence, but rather a simple encryption algorithm I recently made (Actually the first encryption algorithm i make at all!!). Meet *Cherry-Crystal Encryption*. + + +* Okay so, what is this all about ? +This encryption Algorithm that we will call *CCE* for short, takes inspiration from the Caesar cipher which needn't an introduction (you can find great explanations online). But what about mine you might ask ? + + +- It's actually pretty simple. We start with a *Cherry* or a *Visible phrase*, or a *Decoy*, that we will share to people who we don't want to know the secret phrase.. +- Then we ask the user to enter their *Crystal*, *invisible phrase* or *secret*. +- The program then outputs an array of Integers called the *Mask*, or the *Shift*. That is, the shift required to go from cherry_{i} to crystal_{i}. +- Finally, we use both the *Cherry* and *Mask* to get the *Crystal*, a single missing number or letter from both of them can and will output rubbish content. + + +* The Code : + #+BEGIN_SRC c +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +void encrypt(char cherry[], char crystal[], int mask[]) { + int i; + for (i = 0; i < strlen(cherry) - 1; i++) { + mask[i] = cherry[i] - crystal[i]; + } + for (i = strlen(cherry) - 1; i < strlen(crystal) - 1; i++) { + mask[i] = crystal[i]; + } +} +void decrypt(char cherry[], char crystal[], int mask[], int length) { + int i, end = 1; + for (i = 0; i < length; i++) { + if (i == strlen(cherry) - 1 || end == 0) { + crystal[i] = mask[i]; + end = 0; + } else { + crystal[i] = cherry[i] - mask[i]; + } + } +} +int main(int argc, char *argv[]) { + const int size = 1028; + char cherry[size], cherry2[size], crystal[size], crystal2[size]; + int mask[size], mask2[size], i; + int length = 0; + puts("Enter the Cherry: "); + fgets(cherry, size, stdin); + puts("Enter the Crystal: "); + fgets(crystal, size, stdin); + encrypt(cherry, crystal, mask); + for (i = 0; i < strlen(crystal) - 1; i++) { + printf("%d ", mask[i]); + length++; + } + printf("\nYour mask is : %d characters long", length); + puts("\n===Decryption: ===\n"); + puts("Enter the Cherry: "); + fgets(cherry2, size, stdin); + puts("Enter the size of the Mask: "); + scanf("%d", &length); + puts("Enter the mask: "); + for (i = 0; i < length; i++) { + scanf("%d", &mask2[i]); + } + puts("The Crystal is: "); + decrypt(cherry2, crystal2, mask2, length); + puts(crystal2); + return 0; +} + + #+END_SRC + + The program has been tested both on Alpine OS with Musl libc (thanks [[https://kaa.neocities.org/][Kin]]) and on OpenBSD 7.5-current. In the close future I will make a git repo as i'm planning to upgrade it and just make it better overall, who knows, maybe i will make a library out of it!! |