Pues tu modo de encriptacion es lo que se le llama hacer un "swap".
Solo te voy a recomendar algo:
Crea una funcion que haga algo asi.
Cita: funcion encriptar_desencriptar(byte arg)
{
return ((arg&0xF)<<4)|((arg&0xF0)>>4);
}
Y usala para encriptar y para desencriptar, ya que en realidad el proceso 2 veces regresa al resultado original.
Saludos