char ch で
//復号化
while (fread(&ch, sizeof(char), 1, fp) == 1) {
ch = ch - key[i++];
if(i >= keylen) { i = 0; }
fwrite(&ch, sizeof(char), 1, wfp);

これの解説を宜しくお願い致します。
いつもなら、0で返しますが、今回初めて1で返す事になっています。
どういう事かわかりません、もう一つは

ch = ch - key[i++];
if(i >= keylen) { i = 0; }

これの意味です、何をどうインクリットメントするかです。