Il risultato di una "cifratura" (qualunque algoritmo serio/valido: DES, AES, ecc....) è una sequenza di byte che apparentemente non ha alcun significato particolare e "sembra" totalmente casuale. Non rappresenta più caratteri (anche se l'input in chiaro era una stringa di caratteri), pertanto usare il risultato della cifratura per creare una stringa con il costruttore String(byte[]) ha un senso relativamente molto basso. Insomma, ha ben poco senso, perché i byte cifrati non rappresentano caratteri.
Se proprio vuoi ottenere un qualcosa di vagamente stampabile, almeno sfrutta un charset single-byte come "ISO-8859-1" così almeno si ha 1 byte -> 1 carattere. Ovviamente nella stringa puoi comunque avere caratteri non "stampabili" (sicuramente gli ASCII codice 0-31).
Inoltre quando nel encrypt converti la stringa in byte[] dovresti specificare un charset ben preciso, uno di quelli che non faccia "perdere" niente del Unicode. Ad esempio UTF-8. Altrimenti a seconda del charset predefinito, puoi ottenere risultati differenti a seconda del sistema su cui fai girare l'applicazione!