繁体   English   中英

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

[英]How to encrypt/decrypt a file in 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的标识,您所需要做的就是使用相同的密码进行加密/解密。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM