già è qualcosa.
Sai che le lettere possono essere rappresentate tramite 7 bit (l'ASCII) e che un char e un intero, nel range 0-127, possono essere considerati intercambiabili?
in fase di cifratura tu sommi al tuo carattere la differenza tra il valore decimale di A (65) e quello di a (97) e l'output in questo caso vale
key[i] - (2*'A') = temp1codice:out+=(c+key[j]-2*'A')%26+'A'
c + temp1 = temp2
temp2%26 = temp3 //per avere circolarità
temp3+'A'
il perché è stata scelta questa implementazione devi chiederlo a chi lo ha scritto (io avrei fatto in altro modo)