在java中加密文本文件的最简单方法

对于我的学校项目,我必须证明我可以在程序中利用文件处理。 为此,我做了一个非常简单的登录过程,您可以创建一个帐户,将用户名和密码写入位于资源文件夹中的文本文件。 显然这没有任何安全性,因为它不是为了展示文件处理而设计的,但是我的老师曾经说过,我应该尝试为文件添加一些加密以获得更好的分级。

我做了一些研究,许多人都在推荐DES。

我遇到的问题是我没有太多的时间留给我的项目,需要尽快完成。 使用DES似乎需要一段时间才能实现所有额外的代码。

在我的程序中,我使用一个简单的lineNumberReader逐行读取文件。 要写入文件,我使用了BufferedWriter。

无论如何要非常简单地加密这些数据? 它不一定非常安全,但我需要证明我已经试图加密数据。 加密和解密都将在数据未被传输的同一应用程序上完成。

有可能我可以自己创建一个非常简单的加密和解密算法?


试试这个......它非常简单

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class HelloWorld{
    public static void main(String[] args) {

        try{
            KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
            SecretKey myDesKey = keygenerator.generateKey();

            Cipher desCipher;
            desCipher = Cipher.getInstance("DES");


            byte[] text = "No body can see me.".getBytes("UTF8");


            desCipher.init(Cipher.ENCRYPT_MODE, myDesKey);
            byte[] textEncrypted = desCipher.doFinal(text);

            String s = new String(textEncrypted);
            System.out.println(s);

            desCipher.init(Cipher.DECRYPT_MODE, myDesKey);
            byte[] textDecrypted = desCipher.doFinal(textEncrypted);

            s = new String(textDecrypted);
            System.out.println(s);
        }catch(Exception e)
        {
            System.out.println("Exception");
        }
    }
}

所以基本上在写入文件之前,你会加密,阅读后你需要解密它。


你可以使用一个简单的ceasar密码(http://en.wikipedia.org/wiki/Caesar_cipher)

public class Cipher {
public static void main(String[] args) {

    String str = "The quick brown fox Jumped over the lazy Dog";

    System.out.println( Cipher.encode( str, 12 ));
    System.out.println( Cipher.decode( Cipher.encode( str, 12), 12 ));
}

public static String decode(String enc, int offset) {
    return encode(enc, 26-offset);
}

public static String encode(String enc, int offset) {
    offset = offset % 26 + 26;
    StringBuilder encoded = new StringBuilder();
    for (char i : enc.toCharArray()) {
        if (Character.isLetter(i)) {
            if (Character.isUpperCase(i)) {
                encoded.append((char) ('A' + (i - 'A' + offset) % 26 ));
            } else {
                encoded.append((char) ('a' + (i - 'a' + offset) % 26 ));
            }
        } else {
            encoded.append(i);
        }
    }
    return encoded.toString();
}
}

请访问http://rosettacode.org/wiki/Caesar_cipher#Java

请注意,Java具有用于加密的本地解决方案,并且在涉及密码时,只需对它们进行散列和比较散列就好多了,因为通常不需要对它们进行解密。


一个非常基本的方法是用一个密钥对数据进行异或运算。 这种方法是对称的,即你可以使用相同的密钥来解码编码。

如果我们选择一个1字节的密钥,它很好,很简单,足以使其不可读(但一点也不安全!):

private void encodeDecode(byte[] bytes, byte key) {
    for(int i=0; i<bytes.length; i++)
        bytes[i] = (byte) (bytes[i]^key);
}
链接地址: http://www.djcxy.com/p/67697.html

上一篇: Simplest way to encrypt a text file in java

下一篇: Common security practices when an app reads/writes an encrypted database file