#include #include #include #define ENCODE_STARTCHAR 32 #define ENCODE_ENDCHAR 126 int encode(const char *key, const char *text, char *out, size_t outbuflen) { int i; i = 0; int key_size = strlen(key); while(text[i] && i < outbuflen) { out[i] = ((text[i] - ENCODE_STARTCHAR) + (key[i%key_size] - ENCODE_STARTCHAR)) % (ENCODE_ENDCHAR - ENCODE_STARTCHAR + 1) + ENCODE_STARTCHAR; printf("%c + %c -> %c\n", text[i], key[i%key_size], out[i]); i++; } if (i < outbuflen) out[i] = '\0'; return 0; } int decode(const char *key, const char *text, char *out, size_t outbuflen) { int i; i = 0; int key_size = strlen(key); while(text[i] && i < outbuflen) { out[i] = (((text[i] - ENCODE_STARTCHAR) - (key[i%key_size] - ENCODE_STARTCHAR)) + ENCODE_ENDCHAR - ENCODE_STARTCHAR + 1) % (ENCODE_ENDCHAR - ENCODE_STARTCHAR + 1) + ENCODE_STARTCHAR; printf("%c + %c -> %c\n", text[i], key[i%key_size], out[i]); i++; } if (i < outbuflen) out[i] = '\0'; return 0; } int main() { char merong[100]; char merong2[100]; printf("plain text: %s\n", "Meet me in St. Louis"); encode("Walrus", "Meet me in St. Louis", merong, 100); printf("encoded: %s\n", merong); decode("Walrus", merong, merong2, 100); printf("decoded: %s\n", merong2); return 0; }