如何用Java加密/解密文件?

我正在编写一个Java应用程序,它可以“加密”并因此“解密”任何二进制文件。

我只是“加密”领域的初学者,所以我想在开始时编写一个非常简单的应用程序。

为了读取原始文件,我可能会使用java.io.FileInputStream类来获取文件的“字节数组” byte originalBytes[]

然后我可能会使用一些非常简单的密码,例如“ 将每个字节向上移动1 ”然后我会得到“加密”字节byte encryptedBytes[]并且假设我也会为它设置“密码”,因为例如“123456789”。

接下来,当有人想要“解密”该文件时,他必须首先输入密码(“123456789”),之后文件可以被解密(因此“ 每个字节向下移动1 ”)并因此保存到输出文件中通过java.io.FileOutputStream

我只是想知道如何将密码信息“存储”到加密文件中,以便解密应用程序知道输入的密码和“真实”密码是否等于?

将密码(例如密码字母的ASCII序号)添加到文件的开头(加密数据之前)可能是愚蠢的。

所以我的主要问题是如何将密码信息存储到加密文件中

可能更容易不检查用户根据全局密码提供的密码,而是确保只有那一个密码(用户已知)将密文解密为正确的明文,任何其他密码都将返回乱码。 这通常是加密工作的方式,这意味着您无需在任何地方存储集中式密码。

也许这个开源库可以帮助你:

http://www.jasypt.org/

使用密码加密您的数据。 例如,您可以重复密码,使其与字节数组的长度匹配,然后执行类似的操作

 data[i] = data[i] >> password[i]; 

编辑:如果您想存储密码,则必须对其进行加密。 其中 – 至少在使用对称密码系统时 – 本质上是不安全的。

不要把它存放在那里! 任何良好的加密都基于数学算法(如AES)。 你可能想看看BouncyCastle http://www.bouncycastle.org/–但加密不是一个简单的话题,所以你应该先得到一本好书来了解它的基础知识!

试试下面给出的样本。 你可以将字节转换为字符串,然后加密,然后将其写入文件。 在解密时反转它。

http://www.exampledepot.com/egs/javax.crypto/desstring.html

下面你可以找到一个样本DES enc&dec文件..

http://www.exampledepot.com/egs/javax.crypto/DesFile.html

使用密码加密的一种非常简单的方法是使用XOR,这里有一些伪代码

 for(byte in file) { Byte newByte = byte ^ (byte) password[i]; outputFile.write(newByte); i = (i + 1) password.length(); } 

这是基于(x XOR y)XOR y = x的身份,您需要做的就是使用相同的密码加密/解密。