使用AES加密来加密文件
问题描述:
我想使用AES加密来加密文本文件。
但是,我不太确定如何结合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);
}
}
答
我猜是因为你试图调用
public static String encrypt(String value, String salt)
与
String test = Testing.encrypt(text);
出现的错误
因此salt
参数丢失。
尝试调用用即
String test = Testing.encrypt(text,"mySalt");
+0
好吧,它已经可以工作了。非常感谢!! – Twister 2012-08-13 13:24:38
有什么问题,这个功能呢? – EJP 2012-08-13 10:34:22
我已经改变了。 – Twister 2012-08-13 11:51:52
你没有改变任何事情,因为你还没有说明问题所在。 “我正面临一些问题”......哪些问题? – m0skit0 2012-08-13 12:52:38