char *vigenere_encode(char *str, char *key, char *alphabet) { size_t keylen=strlen(key), alphabetlen=strlen(alphabet), i=0; for (i=0;i<strlen(str);i++) str[i]=alphabet[(strchr(alphabet,str[i])-alphabet+strchr(alphabet,key[i%keylen])-alphabet)%alphabetlen]; return str; } char *vigenere_decode(char *str, char *key, char *alphabet) { size_t keylen=strlen(key), alphabetlen=strlen(alphabet), i=0; for (i=0;i<strlen(str);i++) str[i]=alphabet[(strchr(alphabet,str[i])-alphabet-(strchr(alphabet,key[i%keylen])-alphabet)+alphabetlen)%alphabetlen]; return str; } |