如果问题不明确,我想知道在将数据写入文件的过程中,哪些类型的输入或操作可以使它们从文本文件转换为二进制文件?什么可以让文件变成二进制后的wirtten?
原因的问题:
我刚开始我的方式进入(Java)的加密和我做了一个简单的程序,读取从现有的文件中的文本,并对其进行加密后,它在将加密的消息发回文件。
问题:
有时文件保持在“文本”,显示从加密一些ramdom符号和字母,但其他时候,它变成了二进制文件,并运行,尽管一些测试,我似乎无法理解有什么事情是原因。
实施例:
含有单词 “test”,- 附文件
预期输出:�Ҋ5�)>;
导致文件:�Ҋ5�)>;
- 附的文件,
预期输出:�̮�~��<-�L��%
结果File:File turned int二进制
注:我非常积极,它不依赖于单词,我猜测它可能与它生成的加密符号有关,但我可能是错的。
万一它很有用: 我目前正在使用Ubunto并使用“gedit”创建文本文件。
代码:(我appologize的尝试/捕获)
public static void main(String args[]) throws NoSuchAlgorithmException, IOException{
Scanner sc = new Scanner(System.in);
System.out.println("Nome fo ficheiro:");
String fileName = sc.nextLine();
byte [] byteMsg = getByteMsg(fileName);
//* Declare Encriptor--> Cipher//
Cipher cifrador = null;
try {
cifrador = Cipher.getInstance("DES");
} catch (NoSuchPaddingException ex) {
System.out.println("Problema na mensagem");
}
//* Generate key --> KeyGenerator*//
KeyGenerator kgen = null;
try{
kgen = KeyGenerator.getInstance("DES");
}
catch(NoSuchAlgorithmException e){
System.out.println("Algoritmo de encriptação não encontrado");
}
SecretKey key = kgen.generateKey();
//* Inicialize Encritptor and encrypt message* --> Cipher//
try {
cifrador.init(1, key); //1 = Cipher.ENCRYPT_MODE
} catch (InvalidKeyException ex) {
System.out.println("Chave de cifragem inválida");
}
byte[]byteMsgCod = null;
try {
byteMsgCod = cifrador.doFinal(byteMsg);
} catch (IllegalBlockSizeException ex) {
System.out.println("Tamanho de Bloco Ilegal");
} catch (BadPaddingException ex) {
System.out.println("Bad Padding");
}
//* Write encrypted message in the file*//
PrintWriter pw = new PrintWriter(fileName);
String msgCod = new String(byteMsgCod);
System.out.println(msgCod);
pw.println(msgCod);
pw.close();
/* Read text from file */
}
private static byte[] getByteMsg(String fileName) throws IOException{
//Ler msg do ficheiro
Scanner sc = new Scanner(System.in);
FileInputStream fis = null;
try {
fis = new FileInputStream(fileName);
} catch (FileNotFoundException ex) {
System.out.println("Ficheiro não encontrado");
}
byte[] byteMsg = new byte[fis.available()];
fis.close();
return byteMsg;
}
**所有**文件都是二进制文件 –
所有文件都是二进制文件。你看到的是不可打印的字符(字符少于十进制32(0x20)。请参阅任何ASCII图表。 –
@KenWhite我不确定这是否正确,但是这意味着当通过加密生成不可打印的字符时,文件格式将更改以适应事实,即并非所有这些字符都是可打印的,因此可以在正常的“文本”格式? – Fosh