Please give more detail regarding your problem, if my following guess is not the problem you are seeing.
I have successfully used Strings to contain binary data in a convenient (and Hash-able) form. I would not be able to use it in this manner if it was performing random substitutions. Perhaps you are using a FileReader/FileWriter when you should be using a FileInputStream/FileOutputStream? That would change the character data to UTF-Something or other.
from http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileWriter.html Convenience class for writing character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are acceptable. To specify these values yourself, construct an OutputStreamWriter on a FileOutputStream.