我正在用java编写一个程序,它读取文件的输入流,通过根据密码改变字节数来加密它,然后创建一个新的加密文件。
例如:
我创建了一个包含以下文字的测试文件:
This is a test to see if the encrypter project works.
当我在 java 中读取字节时,我得到:
[84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 116, 101, 115, 116, 32, 116, 111, 32, 115, 101, 101, 32, 105, 102, 32, 116, 104, 101, 32, 101, 110, 99, 114, 121, 112, 116, 101, 114, 32, 112, 114, 111, 106, 101, 99, 116, 32, 119, 111, 114, 107, 115, 46, 10]
然后我取每个字节的值,减去密码的 unicode 值,得到绝对值. 然后我把它写到一个文件中。
我正在使用不同的算法对其进行加密,并开始在测试文本文件上对其进行测试。我使用的是 Linux,所以没有文件扩展名(例如 .txt、.pdf 等)我注意到在加密几次后,计算机不再将其识别为文本文件,而是,作为图像文件!(这意味着当您单击它时,默认情况下,它会尝试在图像编辑器中打开文件)
所以这是我的问题:
1、是什么导致计算机将文件识别为某种文件类型?
- 我猜它与它在文件中某处查看的某些字节有关,但除此之外,我迷路了。
2. 这些信息存储在文件中的什么位置?
- 我希望即使在加密之后也能够将文件保持为相同的文件类型,所以我在想,例如,如果文件类型信息在前 10 个字节中,我会加密之后的所有内容,但是例如留下前 10 个字节。
3.文件类型信息标准吗?
- 这些字节是否具有在所有平台上都是标准的含义(即 pdf 文件是 pdf 文件,无论您在哪台计算机上使用它。是因为
.pdf
扩展名,还是因为文件。)
4.假设文件类型由于文件中的字节而被识别,我该如何更改文件类型?
- 我在哪里可以找到文件中哪些字节表示什么的列表?