diff options
Diffstat (limited to 'blog/c/cherry.html')
-rw-r--r-- | blog/c/cherry.html | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/blog/c/cherry.html b/blog/c/cherry.html deleted file mode 100644 index e2d9221..0000000 --- a/blog/c/cherry.html +++ /dev/null @@ -1,171 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> -<head> -<!-- 2024-03-17 Sun 21:46 --> -<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>Reviving Caesar with a Cherry-flavored Crystal</title> -<meta name="author" content="Crystal & Sloth" /> -<meta name="generator" content="Org Mode" /> -<link rel="stylesheet" type="text/css" href="../../src/css/colors.css"/> -<link rel="stylesheet" type="text/css" href="../../src/css/style.css"/> -<link rel="icon" type="image/x-icon" href="../../../favicon.png"> -</head> -<body> -<div id="org-div-home-and-up"> - <a accesskey="h" href=""> UP </a> - | - <a accesskey="H" href="https://crystal.tilde.institute/"> HOME </a> -</div><div id="content" class="content"> -<h1 class="title">Reviving Caesar with a Cherry-flavored Crystal</h1> -<div id="outline-container-org0bff230" class="outline-2"> -<h2 id="org0bff230">What ?…</h2> -<div class="outline-text-2" id="text-org0bff230"> -<p> -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 <b>Cherry-Crystal Encryption</b>. -</p> -</div> -</div> -<div id="outline-container-org4770304" class="outline-2"> -<h2 id="org4770304">Okay so, what is this all about ?</h2> -<div class="outline-text-2" id="text-org4770304"> -<p> -This encryption Algorithm that we will call <b>CCE</b> 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 ? -</p> - - -<ul class="org-ul"> -<li>It’s actually pretty simple. We start with a <b>Cherry</b> or a <b>Visible phrase</b>, or a <b>Decoy</b>, that we will share to people who we don’t want to know the secret phrase..</li> -<li>Then we ask the user to enter their <b>Crystal</b>, <b>invisible phrase</b> or <b>secret</b>.</li> -<li>The program then outputs an array of Integers called the <b>Mask</b>, or the <b>Shift</b>. That is, the shift required to go from cherry<sub>i</sub> to crystal<sub>i</sub>.</li> -<li>Finally, we use both the <b>Cherry</b> and <b>Mask</b> to get the <b>Crystal</b>, a single missing number or letter from both of them can and will output rubbish content.</li> -</ul> -</div> -</div> -<div id="outline-container-org4496ca5" class="outline-2"> -<h2 id="org4496ca5">The Code :</h2> -<div class="outline-text-2" id="text-org4496ca5"> -<div class="org-src-container"> -<pre class="src src-c"><span style="color: #f9e2af;">#include</span> <span style="color: #f38ba8;"><</span><span style="color: #a6e3a1;">stdio.h</span><span style="color: #f38ba8;">></span> -<span style="color: #f9e2af;">#include</span> <span style="color: #f38ba8;"><</span><span style="color: #a6e3a1;">stdlib.h</span><span style="color: #f38ba8;">></span> -<span style="color: #f9e2af;">#include</span> <span style="color: #f38ba8;"><</span><span style="color: #a6e3a1;">string.h</span><span style="color: #f38ba8;">></span> - -<span style="color: #f9e2af;">void</span> <span style="color: #89b4fa;">sloth</span><span style="color: #f38ba8;">(</span><span style="color: #f9e2af;">char</span> <span style="color: #cdd6f4;">cherry</span><span style="color: #fab387;">[]</span>, <span style="color: #f9e2af;">char</span> <span style="color: #cdd6f4;">crystal</span><span style="color: #fab387;">[]</span>, <span style="color: #f9e2af;">int</span> <span style="color: #cdd6f4;">mask</span><span style="color: #fab387;">[]</span><span style="color: #f38ba8;">)</span> <span style="color: #f38ba8;">{</span> - <span style="color: #f9e2af;">int</span> <span style="color: #cdd6f4;">i</span>; - <span style="color: #cba6f7;">for</span> <span style="color: #fab387;">(</span>i = <span style="color: #fab387;">0</span>; i < strlen<span style="color: #f9e2af;">(</span>cherry<span style="color: #f9e2af;">)</span> - <span style="color: #fab387;">1</span>; i++<span style="color: #fab387;">)</span> <span style="color: #fab387;">{</span> - mask<span style="color: #f9e2af;">[</span>i<span style="color: #f9e2af;">]</span> = cherry<span style="color: #f9e2af;">[</span>i<span style="color: #f9e2af;">]</span> - crystal<span style="color: #f9e2af;">[</span>i<span style="color: #f9e2af;">]</span>; - <span style="color: #fab387;">}</span> - <span style="color: #cba6f7;">for</span> <span style="color: #fab387;">(</span>i = strlen<span style="color: #f9e2af;">(</span>cherry<span style="color: #f9e2af;">)</span> - <span style="color: #fab387;">1</span>; i < strlen<span style="color: #f9e2af;">(</span>crystal<span style="color: #f9e2af;">)</span> - <span style="color: #fab387;">1</span>; i++<span style="color: #fab387;">)</span> <span style="color: #fab387;">{</span> - mask<span style="color: #f9e2af;">[</span>i<span style="color: #f9e2af;">]</span> = crystal<span style="color: #f9e2af;">[</span>i<span style="color: #f9e2af;">]</span>; - <span style="color: #fab387;">}</span> -<span style="color: #f38ba8;">}</span> -<span style="color: #f9e2af;">void</span> <span style="color: #89b4fa;">moon</span><span style="color: #f38ba8;">(</span><span style="color: #f9e2af;">char</span> <span style="color: #cdd6f4;">cherry</span><span style="color: #fab387;">[]</span>, <span style="color: #f9e2af;">char</span> <span style="color: #cdd6f4;">crystal</span><span style="color: #fab387;">[]</span>, <span style="color: #f9e2af;">int</span> <span style="color: #cdd6f4;">mask</span><span style="color: #fab387;">[]</span>, <span style="color: #f9e2af;">int</span> <span style="color: #cdd6f4;">length</span><span style="color: #f38ba8;">)</span> <span style="color: #f38ba8;">{</span> - <span style="color: #f9e2af;">int</span> <span style="color: #cdd6f4;">i</span>, <span style="color: #cdd6f4;">end</span> = <span style="color: #fab387;">1</span>; - <span style="color: #cba6f7;">for</span> <span style="color: #fab387;">(</span>i = <span style="color: #fab387;">0</span>; i < length; i++<span style="color: #fab387;">)</span> <span style="color: #fab387;">{</span> - <span style="color: #cba6f7;">if</span> <span style="color: #f9e2af;">(</span>i == strlen<span style="color: #a6e3a1;">(</span>cherry<span style="color: #a6e3a1;">)</span> - <span style="color: #fab387;">1</span> || end == <span style="color: #fab387;">0</span><span style="color: #f9e2af;">)</span> <span style="color: #f9e2af;">{</span> - crystal<span style="color: #a6e3a1;">[</span>i<span style="color: #a6e3a1;">]</span> = mask<span style="color: #a6e3a1;">[</span>i<span style="color: #a6e3a1;">]</span>; - end = <span style="color: #fab387;">0</span>; - <span style="color: #f9e2af;">}</span> <span style="color: #cba6f7;">else</span> <span style="color: #f9e2af;">{</span> - crystal<span style="color: #a6e3a1;">[</span>i<span style="color: #a6e3a1;">]</span> = cherry<span style="color: #a6e3a1;">[</span>i<span style="color: #a6e3a1;">]</span> - mask<span style="color: #a6e3a1;">[</span>i<span style="color: #a6e3a1;">]</span>; - <span style="color: #f9e2af;">}</span> - <span style="color: #fab387;">}</span> -<span style="color: #f38ba8;">}</span> -<span style="color: #f9e2af;">int</span> <span style="color: #89b4fa;">main</span><span style="color: #f38ba8;">(</span><span style="color: #f9e2af;">int</span> <span style="color: #cdd6f4;">argc</span>, <span style="color: #f9e2af;">char</span> *<span style="color: #cdd6f4;">argv</span><span style="color: #fab387;">[]</span><span style="color: #f38ba8;">)</span> <span style="color: #f38ba8;">{</span> - <span style="color: #cba6f7;">const</span> <span style="color: #f9e2af;">int</span> <span style="color: #cdd6f4;">size</span> = <span style="color: #fab387;">1028</span>; - <span style="color: #f9e2af;">char</span> <span style="color: #cdd6f4;">cherry</span><span style="color: #fab387;">[</span>size<span style="color: #fab387;">]</span>, <span style="color: #cdd6f4;">cherry2</span><span style="color: #fab387;">[</span>size<span style="color: #fab387;">]</span>, <span style="color: #cdd6f4;">crystal</span><span style="color: #fab387;">[</span>size<span style="color: #fab387;">]</span>, <span style="color: #cdd6f4;">crystal2</span><span style="color: #fab387;">[</span>size<span style="color: #fab387;">]</span>; - <span style="color: #f9e2af;">int</span> <span style="color: #cdd6f4;">mask</span><span style="color: #fab387;">[</span>size<span style="color: #fab387;">]</span>, <span style="color: #cdd6f4;">mask2</span><span style="color: #fab387;">[</span>size<span style="color: #fab387;">]</span>, <span style="color: #cdd6f4;">i</span>; - <span style="color: #f9e2af;">int</span> <span style="color: #cdd6f4;">length</span> = <span style="color: #fab387;">0</span>; - puts<span style="color: #fab387;">(</span><span style="color: #a6e3a1;">"Enter the Cherry: "</span><span style="color: #fab387;">)</span>; - fgets<span style="color: #fab387;">(</span>cherry, size, stdin<span style="color: #fab387;">)</span>; - puts<span style="color: #fab387;">(</span><span style="color: #a6e3a1;">"Enter the Crystal: "</span><span style="color: #fab387;">)</span>; - fgets<span style="color: #fab387;">(</span>crystal, size, stdin<span style="color: #fab387;">)</span>; - sloth<span style="color: #fab387;">(</span>cherry, crystal, mask<span style="color: #fab387;">)</span>; - <span style="color: #cba6f7;">for</span> <span style="color: #fab387;">(</span>i = <span style="color: #fab387;">0</span>; i < strlen<span style="color: #f9e2af;">(</span>crystal<span style="color: #f9e2af;">)</span> - <span style="color: #fab387;">1</span>; i++<span style="color: #fab387;">)</span> <span style="color: #fab387;">{</span> - printf<span style="color: #f9e2af;">(</span><span style="color: #a6e3a1;">"%d "</span>, mask<span style="color: #a6e3a1;">[</span>i<span style="color: #a6e3a1;">]</span><span style="color: #f9e2af;">)</span>; - length++; - <span style="color: #fab387;">}</span> - printf<span style="color: #fab387;">(</span><span style="color: #a6e3a1;">"\nYour mask is : %d characters long"</span>, length<span style="color: #fab387;">)</span>; - puts<span style="color: #fab387;">(</span><span style="color: #a6e3a1;">"\n===Decryption: ===\n"</span><span style="color: #fab387;">)</span>; - puts<span style="color: #fab387;">(</span><span style="color: #a6e3a1;">"Enter the Cherry: "</span><span style="color: #fab387;">)</span>; - fgets<span style="color: #fab387;">(</span>cherry2, size, stdin<span style="color: #fab387;">)</span>; - puts<span style="color: #fab387;">(</span><span style="color: #a6e3a1;">"Enter the size of the Mask: "</span><span style="color: #fab387;">)</span>; - scanf<span style="color: #fab387;">(</span><span style="color: #a6e3a1;">"%d"</span>, &length<span style="color: #fab387;">)</span>; - puts<span style="color: #fab387;">(</span><span style="color: #a6e3a1;">"Enter the mask: "</span><span style="color: #fab387;">)</span>; - <span style="color: #cba6f7;">for</span> <span style="color: #fab387;">(</span>i = <span style="color: #fab387;">0</span>; i < length; i++<span style="color: #fab387;">)</span> <span style="color: #fab387;">{</span> - scanf<span style="color: #f9e2af;">(</span><span style="color: #a6e3a1;">"%d"</span>, &mask2<span style="color: #a6e3a1;">[</span>i<span style="color: #a6e3a1;">]</span><span style="color: #f9e2af;">)</span>; - <span style="color: #fab387;">}</span> - puts<span style="color: #fab387;">(</span><span style="color: #a6e3a1;">"The Crystal is: "</span><span style="color: #fab387;">)</span>; - moon<span style="color: #fab387;">(</span>cherry2, crystal2, mask2, length<span style="color: #fab387;">)</span>; - puts<span style="color: #fab387;">(</span>crystal2<span style="color: #fab387;">)</span>; - <span style="color: #cba6f7;">return</span> <span style="color: #fab387;">0</span>; -<span style="color: #f38ba8;">}</span> - -</pre> -</div> - -<p> -The program has been tested both on Alpine OS with Musl libc (thanks <a href="https://kaa.neocities.org/">Kin</a>) 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!! -</p> -</div> -</div> -<div id="outline-container-org6c3305a" class="outline-2"> -<h2 id="org6c3305a">How does it work ?</h2> -<div class="outline-text-2" id="text-org6c3305a"> -</div> -<div id="outline-container-orgf462a7c" class="outline-3"> -<h3 id="orgf462a7c">Slothing (Encrypting) 🦥:</h3> -<div class="outline-text-3" id="text-orgf462a7c"> -<p> -<del>What is it with these names I pick ?</del> Anyways, the <b>sloth(char *cherry, char *crystal, int *mask)</b> void function takes as parameters three variables: -</p> - -<ul class="org-ul"> -<li>A pointer to a <b>char array</b> or simply said <b>a string</b>, It’s the <b>Cherry</b>.</li> -<li>Another pointer to the <b>Crystal</b>.</li> -<li>And Finally, a pointer to an array of integers <b>The Mask</b> which will be output-ed by the function.</li> -</ul> - - -<p> -The general idea of it is like this : (we will use a quick example) -</p> - -<ul class="org-ul"> -<li><b>Cherry</b>: H e l l o \0.</li> -<li><b>Crystal</b>: W o r l d \0.</li> -<li>Cherry[0] here is <b>H</b>, or in ASCII <b>72</b>. And Crystal[0] is <b>W</b> or <b>87</b>.</li> -<li>Mask[0] in this case is : Cherry[0] - Crystal[0]. which is <b>-15</b>. We then repeat the same steps for each letter on the <b>Crystal</b>.</li> -</ul> - -<p> -Why the emphasis on <b>Crystal</b> ? Because we might end up with a case of a Crystal larger than a Cherry. we set the offset to the ASCII value of <b>Crystal[i]</b>, okay which to be fair is not the safest option out there, but I’m planning on fixing it sooner or later. In the case of a large Cherry but a small Crystal…it works but now looking at the code, i have no idea why it works the intended way…. -</p> -</div> -</div> -<div id="outline-container-org7cb73ea" class="outline-3"> -<h3 id="org7cb73ea">Mooning (Decrypting) 🌕:</h3> -<div class="outline-text-3" id="text-org7cb73ea"> -<p> -The function <b>moon(char *cherry, char *crystal, int *mask, int length)</b> works the same way as the sloth function, but in reverse and a small change. -</p> - -<ul class="org-ul"> -<li><b>The for loop goes through all the elements of the Mask and reconstructing the Crystal using the reverse equation of the encryption</b>. But when it arrives at the end of the <b>Cherry</b> (here we enter the case of a Cherry smaller than a Crystal). Then we will just assume that <b>Mask[i]</b> is the ASCII code of <b>Crystal[i]</b>, and we continue this assumption until the end of the loop.</li> -</ul> - - -<p> -And voila that’s it. Of course there might be some things I will change, but the overall concept is here! -</p> -</div> -</div> -</div> -</div> -<div id="postamble" class="status"> -<p class="author">Author: Crystal & Sloth</p> -<p class="date">Created: 2024-03-17 Sun 21:46</p> -</div> -</body> -</html> |