【问题标题】:How to encrypt/decrypt a file in Java?如何在 Java 中加密/解密文件?
【发布时间】:2011-01-27 09:19:14
【问题描述】:

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

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

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

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

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


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

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


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

【问题讨论】:

    标签: java encryption passwords


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      http://www.jasypt.org/

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

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

            您可以在下面找到文件的示例 DES enc&dec..

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

            【讨论】:

            • 你可以在 java cryptography api 中找到各种内置的算法。你也可以在哪里使用 AES、DES、RSA 和简单的密码......
            • 你还可以通过加密功能验证输入密码并与密码文件直接匹配..
            【解决方案6】:

            使用密码进行加密的一个非常简单的方法是使用异或,这是一些伪代码

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

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

            【讨论】:

            • xoring 一个较小的键被秒填充。问题。这就是为什么 xoring 不用于加密的原因。如果密码大小与文件大小相同,那将很有帮助,这将是不切实际的...
            猜你喜欢
            • 1970-01-01
            • 2016-03-11
            • 2012-02-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-22
            • 2013-03-01
            相关资源
            最近更新 更多