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

时间:2010-03-14 13:23:10

标签: java encryption passwords

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

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

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

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

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


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

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


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

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

http://www.jasypt.org/

答案 2 :(得分:2)

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

的操作
data[i] = data[i] >> password[i];

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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

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

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

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

答案 5 :(得分:1)

使用密码加密的一种非常简单的方法是使用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的身份,您需要做的就是用相同的密码加密/解密。

相关问题