0

我正在尝试将纯文本数据转换为二进制格式,以便它变得不可编辑。数据需要写入文件。如果我在控制台窗口中打印它并且无法读取原始文本,则转换有效。但是,将其写入文件时,会出现相同的原始文本。如何将此二进制数据写入文件,而不对其进行加密,但使其不可读?

该文件稍后需要由另一个接受二进制数据的第三方工具处理。这就是为什么我无法使用自己的算法对其进行加密的原因。

这是我的代码:

import java.io.*;
import java.lang.*;
public class convert{
public static void main( String args[] ){
String s= "This is text";
try{
File file= new File("test.php");
file.createNewFile();
FileWriter fw= new FileWriter( file.getName(), true );
BufferedWriter bw= new BufferedWriter( fw );

byte[] b= s.getBytes();
for(int x=0; x<b.length; x++){
byte c=b[x];
bw.write( c );
System.out.println(c);
}

bw.close();
}catch( Exception e ){ e.printStackTrace(); }
}//main
}//class
4

2 回答 2

1

纯文本本身就是一种二进制格式,其中每个字节都被解释为一个字符(或其他变体,取决于假定或指定的编码,例如 UTF-8、UTF-16...)。

这意味着如果您将 ASCII 字符作为字节写入文件,它将看起来相同并且任何人都可以读取。事实上,很多二进制文件格式仍然将字符串保存为普通字节,这意味着它们可以在十六进制编辑器中打开时读取,例如这里: 十六进制编辑器

要使其不可读,您需要做的是将其序列化为一些不可读的通用格式。不幸的是,Java 中的普通序列化是可读的,但您可以在此处查看如何隐藏它的建议。您也可以使用 ZIP 或类似的压缩算法。

另一种更老套的方法是将所有字符字节移动某个已知值。这将导致它们变成不同的字符,并且不可读。这可以看作是一个非常基本的凯撒芯片

但归根结底,重要的是您的目标程序能够读取哪种格式。

于 2013-02-22T04:17:17.810 回答
0

好吧,您可以为此使用 RandomAccessFile。它变得容易。

RandomAccessFile raf = new RandomAccessFile(path,permissions); //permissions are r,w,rw. The usual ones.
raf.seek(0); //this will set the pointer to first position.
raf.writeUTF(what ever you want to write to file);

//to read the file use readUTF()
raf.seek(0); //you can read from a part of file using this seek method.
System.out.println(raf.readUTF());
于 2014-11-30T05:18:38.210 回答