我已经做了几年的网络编程,从那时起我就没有为桌面应用程序做过任何编程,而且我已经忘记了很多东西.如果这太简单了,请耐心等待.
现在我有这种情况:
我试图在文件中存储一些哈希的单词.我想我应该使用二进制文件(如果我错了请纠正我).但我不知道如何将文字写入文件.我尝试了很多方法,但是当我回读文件并尝试解密这些文字时,我得到了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));
}
Run Code Online (Sandbox Code Playgroud)
Vic*_*kin 20
好吧,只需使用FileInputStream和FileOutputStream=)
样本写作:
// encrypted data in array
byte[] data = ...
FileOutputStream fos = ...
fos.write(data, 0, data.length);
fos.flush();
fos.close();
Run Code Online (Sandbox Code Playgroud)
样本阅读:
File inputFile = new File(filePath);
byte[] data = new byte[inputFile.length()];
FileInputStream fis = new FileInputStream(inputFile);
fis.read(data, 0, data.length);
fis.close();
Run Code Online (Sandbox Code Playgroud)
上面的代码假设一个文件包含单个加密项.如果您需要在单个文件中保存多个项目,则需要为此设计一些格式方案.例如,您可以在数据本身之前将加密数据中的字节数存储为2个字节.每个项目2个字节表示加密项目不能超过2 ^ 16个字节.当然,您可以使用4个字节的长度.
| 归档时间: |
|
| 查看次数: |
60326 次 |
| 最近记录: |