Irgendwie sieht das wieder falsch aus, denn man könnte bei der Variable str vermuten, dass diese als string deklariert ist, und das ist nach dem Encrypten eben nicht mehr zutreffend.
Ein Delphi-String ist durchaus in der Lage, nicht-druckbare Zeichen, wie CR, LF oder #0 korrekt zu speichern. Macht man daraus aber durch Zuweisung oder Cast einen PChar, dann wird beim ersten #0 abgeschnitten.