Apparament, il y a une "la fonction externe" qui constitue une contrainte. Je crois comprendre, sans en être sûr, que cette fonction prend en entrée la chaine cryptée qu'on lui passe, et que cette chaîne doit être terminée par un caractère nul.
Si c'est bien cela, alors, je vois les solutions suivantes :
1. Soit, remplacer les caratères nuls de milieu de chaîne par un autre caractère qui n'est jamais utilisé, par exemple le caractère 1/2, ou le point d'exclamation à l'envers des textes espagnols, ou le caractère de code 255.
Faire ce remplacement tout au début du cryptage, et dans l'autre sens tout à la fin du décryptage.
2. Soit, remplacer les caratères nuls de milieu de chaîne par un ensemble de plusieurs caractères qui ne sont jamais utilisés, par exemple <<<null>>>.
Faire ce remplacement tout au début du cryptage, et dans l'autre sens tout à la fin du décryptage.
3. Remplacer d'abord tous les caractères par leur valeur hexadécimale, par exemple "AA\0BC" devient "6161006263".
Faire ce remplacement tout au début du cryptage, et dans l'autre sens tout à la fin du décryptage.
4. Changer la méthode de cryptage, parce qu'il en existe beaucoup d'autres qui sont au moins aussi bonnes que la méthode par xor, même si elles nécéssitent un tout petit peu plus de programmation.