0

我想使用 AES 加密来加密文本文件。
但是,我不太确定如何结合 Aes 代码和文件读取代码。我是这种加密的新手。任何帮助表示赞赏。

我已经尝试过这样做。并且在加密下有错误,它声明不适用于参数。还是我应该以另一种方式来做?

public static void main(String[] args) throws Exception {

    FileReader file = new FileReader ("original.txt");
    BufferedReader reader = new BufferedReader(file);

    String text = "";
    String line = reader.readLine();
    while(line !=null)
    {
        text +=line; 
        line = reader.readLine();
    }


    String test = Testing.encrypt(text);
    System.out.println("Encrypted : " + test);
    reader.close();
  } 

完整代码如下。非常感谢。

(AES 加密)

 package encypt.com;

import java.io.BufferedReader;
import java.io.FileReader;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.*;

public class Testing {

private static final String ALGORITHM = "AES";
private static final int ITERATIONS = 2;
private static final byte[] keyValue = 
    new byte[] { 'T', 'h', 'i', 's', 'I', 's', 'A', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y'};

public static String encrypt(String value, String salt) throws Exception {
    Key key = generateKey();
    Cipher c = Cipher.getInstance(ALGORITHM);  
    c.init(Cipher.ENCRYPT_MODE, key);

    String valueToEnc = null;
    String eValue = value;
    for (int i = 0; i < ITERATIONS; i++) {
        valueToEnc = salt + eValue;
        byte[] encValue = c.doFinal(valueToEnc.getBytes());
        eValue = new BASE64Encoder().encode(encValue);
    }
    return eValue;
}

public static String decrypt(String value, String salt) throws Exception {
    Key key = generateKey();
    Cipher c = Cipher.getInstance(ALGORITHM);
    c.init(Cipher.DECRYPT_MODE, key);

    String dValue = null;
    String valueToDecrypt = value;
    for (int i = 0; i < ITERATIONS; i++) {
        byte[] decordedValue = new BASE64Decoder().decodeBuffer(valueToDecrypt);
        byte[] decValue = c.doFinal(decordedValue);
        dValue = new String(decValue).substring(salt.length());
        valueToDecrypt = dValue;
    }
    return dValue;
}

private static Key generateKey() throws Exception {
    Key key = new SecretKeySpec(keyValue, ALGORITHM);
    // SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
    // key = keyFactory.generateSecret(new DESKeySpec(keyValue));
    return key;
}


public static void main(String[] args) throws Exception {


    String password = "mypassword";
    String salt = "this is a simple clear salt";
    String passwordEnc = Testing.encrypt(password, salt);
    String passwordDec = Testing.decrypt(passwordEnc, salt);

   System.out.println("Salt Text : " + salt);
   System.out.println("Plain Text : " + password);
   System.out.println("Encrypted : " + passwordEnc);
   System.out.println("Decrypted : " + passwordDec);
}
}

(文件读取代码)

package encypt.com;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Scanner;

public class readfile {
public static void main(String[] args) throws Exception {

    FileReader file = new FileReader ("key.txt");
    BufferedReader reader = new BufferedReader(file);

    String text = "";
    String line = reader.readLine();
    while(line !=null)
    {
        text +=line; 
        line = reader.readLine();
    }

    reader.close();
    System.out.println(text); 
  } 
} 
4

1 回答 1

2

我猜你的错误是因为你试图打电话

public static String encrypt(String value, String salt)

String test = Testing.encrypt(text);

所以salt缺少参数。

尝试用 ie 调用这个函数

String test = Testing.encrypt(text,"mySalt");
于 2012-08-13T13:13:33.590 回答