Java:如何编写二进制文件?

2022-09-02 21:36:50

我已经做了几年的Web编程,从那时起,我没有为桌面应用程序做任何编程,我已经忘记了很多事情。如果这太简单,请耐心等待。

现在我有这种情况:
我正在尝试在文件中存储一些散列单词。我认为我应该为此使用二进制文件(如果我错了,请纠正我)。但是我不知道我应该如何将单词写入文件。我尝试了很多方法,但是当我读回文件并尝试解密单词时,我得到了.BadPaddingException

有没有人知道如何将单词写入文件?

PS:我用这段代码来加密/解密单词(我从另一个StackOverflow线程获得它,并进行了一些修改):

public static byte[] encrypt(String property) throws GeneralSecurityException, UnsupportedEncodingException {
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
        SecretKey key = keyFactory.generateSecret(new PBEKeySpec(password));
        Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
        pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(salt, 20));
        return pbeCipher.doFinal(property.getBytes("UTF-8"));
    }

    public static String decrypt(byte[] property) throws GeneralSecurityException, IOException {
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
        SecretKey key = keyFactory.generateSecret(new PBEKeySpec(password));
        Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
        pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(salt, 20));
        return new String(pbeCipher.doFinal(property));
    }

答案 1

好吧,只是使用和FileInputStreamFileOutputStream =)

写作示例:

// encrypted data in array
byte[] data = ...

FileOutputStream fos = ...
fos.write(data, 0, data.length);
fos.flush();
fos.close();

示例阅读:

File inputFile = new File(filePath);
byte[] data = new byte[inputFile.length()];
FileInputStream fis = new FileInputStream(inputFile);
fis.read(data, 0, data.length);
fis.close();

上面的代码假定一个文件包含单个加密项。如果您需要在单个文件中保存多个项目,则需要为此设计一些格式方案。例如,可以将加密数据中的字节数存储为 2 个字节,然后存储在数据本身之前。每个项目 2 个字节表示加密项目的长度不能超过 2^16 个字节。当然,您可以使用4个字节作为长度。


答案 2

保存为文本文档对我来说似乎更有意义,数据已经是一个,所以没有必要将其转换为a,如果你需要从文件中读取,将非常方便。除非您从 Web 保存它,并且它已经通过套接字作为 .我知道它说不要提供你的意见,但它完全是一个意见问题,这是你问题中唯一没有被回答的前两个回答的部分。byte[]byte[]