diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/org/blog/assembly/1.org | 2 | ||||
-rw-r--r-- | src/org/blog/c/cherry.org | 36 |
2 files changed, 33 insertions, 5 deletions
diff --git a/src/org/blog/assembly/1.org b/src/org/blog/assembly/1.org index 0ed897b..e268824 100644 --- a/src/org/blog/assembly/1.org +++ b/src/org/blog/assembly/1.org @@ -29,7 +29,7 @@ The relation between the Effective Address and the Segment & Offset is as follow **Effective address = 16 x segment + offset** keep in mind that this equation is encoded in decimal, which will change soon as we use Hexadecimal for convention reasons. **** Example : -Let the Physical address (Or Effective Address, these two terms are enterchangeable) *12345h* (the h refers to Hexadecimal, which can also be written like this *0x12345*), the register *DS = 1230h* and the register *SI = 0045h*, the CPU calculates the physical address by multiplying the content of the segment register *DS* by 10h (or 16) and adding the content of the register *SI*. so we get : *1230h x 10h + 45h = 12345h* +Let the Physical address (Or Effective Address, these two terms are interchangeable) *12345h* (the h refers to Hexadecimal, which can also be written like this *0x12345*), the register *DS = 1230h* and the register *SI = 0045h*, the CPU calculates the physical address by multiplying the content of the segment register *DS* by 10h (or 16) and adding the content of the register *SI*. so we get : *1230h x 10h + 45h = 12345h* Now if you are a clever one ( I know you are, since you are reading this <3 ) you may say that the physical address *12345h* can be written in more than one way....and you are right, more precisely : *2^{12} = 4096* different ways !!! diff --git a/src/org/blog/c/cherry.org b/src/org/blog/c/cherry.org index 324aa4c..beb7939 100644 --- a/src/org/blog/c/cherry.org +++ b/src/org/blog/c/cherry.org @@ -30,7 +30,7 @@ This encryption Algorithm that we will call *CCE* for short, takes inspiration f #include <stdlib.h> #include <string.h> -void encrypt(char cherry[], char crystal[], int mask[]) { +void sloth(char cherry[], char crystal[], int mask[]) { int i; for (i = 0; i < strlen(cherry) - 1; i++) { mask[i] = cherry[i] - crystal[i]; @@ -39,7 +39,7 @@ void encrypt(char cherry[], char crystal[], int mask[]) { mask[i] = crystal[i]; } } -void decrypt(char cherry[], char crystal[], int mask[], int length) { +void moon(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) { @@ -59,7 +59,7 @@ int main(int argc, char *argv[]) { fgets(cherry, size, stdin); puts("Enter the Crystal: "); fgets(crystal, size, stdin); - encrypt(cherry, crystal, mask); + sloth(cherry, crystal, mask); for (i = 0; i < strlen(crystal) - 1; i++) { printf("%d ", mask[i]); length++; @@ -75,7 +75,7 @@ int main(int argc, char *argv[]) { scanf("%d", &mask2[i]); } puts("The Crystal is: "); - decrypt(cherry2, crystal2, mask2, length); + moon(cherry2, crystal2, mask2, length); puts(crystal2); return 0; } @@ -83,3 +83,31 @@ int main(int argc, char *argv[]) { #+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!! + + +* How does it work ? +** Slothing (Encrypting) 🦥: ++What is it with these names I pick ?+ Anyways, the *sloth(char *cherry, char *crystal, int *mask)* void function takes as parameters three variables: + +- A pointer to a *char array* or simply said *a string*, It's the *Cherry*. +- Another pointer to the *Crystal*. +- And Finally, a pointer to an array of integers *The Mask* which will be output-ed by the function. + + +The general idea of it is like this : (we will use a quick example) + +- *Cherry*: H e l l o \0. +- *Crystal*: W o r l d \0. +- Cherry[0] here is *H*, or in ASCII *72*. And Crystal[0] is *W* or *87*. +- Mask[0] in this case is : Cherry[0] - Crystal[0]. which is *-15*. We then repeat the same steps for each letter on the *Crystal*. + +Why the emphasis on *Crystal* ? Because we might end up with a case of a Crystal larger than a Cherry. we set the offset to the ASCII value of *Crystal[i]*, 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.... + + +** Mooning (Decrypting) 🌕: +The function *moon(char *cherry, char *crystal, int *mask, int length)* works the same way as the sloth function, but in reverse and a small change. + +- *The for loop goes through all the elements of the Mask and reconstructing the Crystal using the reverse equation of the encryption*. But when it arrives at the end of the *Cherry* (here we enter the case of a Cherry smaller than a Crystal). Then we will just assume that *Mask[i]* is the ASCII code of *Crystal[i]*, and we continue this assumption until the end of the loop. + + +And voila that's it. Of course there might be some things I will change, but the overall concept is here! |