我正在编写一个Java应用程序,它可以“加密”并因此“解密”任何二进制文件。
我只是“加密”领域的初学者,所以我想在开始时编写一个非常简单的应用程序。
为了阅读原始文件,我可能会使用java.io.FileInputStream
类来获取文件的“字节数组”byte originalBytes[]
。
然后我可能会使用一些非常简单的密码,例如“将每个字节向上移动1 ”然后我会得到“加密”字节byte encryptedBytes[]
并让我们说我也会为它设置一个“密码”,例如“123456789”。
接下来,当有人想要“解密”该文件时,他必须首先输入密码(“123456789”),然后才能解密该文件(因此“将每个字节向下移动1 “)并因此通过java.io.FileOutputStream
保存到输出文件。
我只是想知道如何将密码信息“存储”到加密文件中,以便解密应用程序知道输入的密码和“真实”密码是否等于?
将密码(例如密码字母的ASCII序号)添加到文件的开头(加密数据之前)可能是愚蠢的。
所以我的主要问题是 如何将密码信息存储到加密文件 ?
答案 0 :(得分:5)
可能更容易不检查用户对全局密码提供的密码,而是确保只有一个密码(用户已知)将密文解密为正确的明文,任何其他密码都将返回乱码。这通常是加密工作的方式,这意味着您无需在任何地方存储集中密码。
答案 1 :(得分:4)
也许这个开源库可以帮助你:
答案 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 ..
答案 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的身份,您需要做的就是用相同的密码加密/解密。