Ciao a tutti, ho un problema con questo programmino:

codice:
class EncodeBetter {
public static void main(String args[]) {

int j = 0;
String msg = "This is a test";
String encmsg = " ";
String decmsg = " ";
String key = "codifica";

System.out.print("Messaggio originale: ");
System.out.println(msg);

//codifica il messaggio
for (int i = 0; i < msg.length(); i++)
    {
    encmsg += (char) (msg.charAt(i) ^ key.charAt(j));
    j++;
    if (j == 8) j = 0;
    }

System.out.print("Messaggio codificato: ");
System.out.println(encmsg);

//decodifica il messaggio
j = 0;
for (int i = 0; i < msg.length(); i++)  
    {
    decmsg = decmsg + (char) (encmsg.charAt(i) ^ key.charAt(j));
    j++;
    if (j == 8) j = 0;
}

System.out.print("Messaggio decodificato: ");
System.out.println(decmsg);

 }
}
Lo vorrei utilizzare per crittografare e poi decrittografare la stringa msg, che contiene "This is a test". Purtroppo l'output che ottengo è il seguente:

Messaggio originale: This is a test
Messaggio codificato: %ROU
Messaggio decodificato: QP|le3|h>e4qs`


Come vedete non viene restituita la stringa corretta, qualcuno sa come correggere il codice?
Grazie in anticipo.