Cryptography Code
Caesar
some of the code I've written is so stupid I tell you.
this one basically fires up a REPL with a argv[1]
as the number of forward caesar cipher steps you want to take.
really not worth running.
#include <stdio.h>
#include <stdlib.h>
int upper(int character, int shift) {
character += shift;
if (character > 90) {
character = (character-90)%26 + 64;
}
else if (character < 65) {
character = (65-character)%26;
if (character == 0) return 65;
character = 91 - character;
}
return character;
}
int lower(int character, int shift) {
character += shift;
if (character > 122) {
character = (character-122)%26 + 96;
}
else if (character < 97) {
character = (97-character)%26;
if (character == 0) return 97;
character = 123 - character;
}
return character;
}
int main(int argc, char* argv[]) {
int shift = atoi(argv[1]);
int character = getchar();
while (character != EOF) {
if (character >= 'A' && character <= 'Z') {
putchar(upper(character, shift));
}
else if (character >= 'a' && character <= 'z') {
putchar(lower(character, shift));
}
else putchar(character);
character = getchar();
}
}
File XOR
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fi, *fo;
char *cp;
int c;
if ((cp = argv[1]) && *cp!='\0') {
if ((fi = fopen(argv[2], "rb")) != NULL) {
if ((fo = fopen(argv[3], "wb")) != NULL) {
while ((c = getc(fi)) != EOF) {
if (!*cp) cp = argv[1];
c ^= *(cp++);
putc(c,fo);
}
fclose(fo);
}
fclose(fi);
}
}
}