0

我创建了一个基本程序,它将输入的内容输入两个文本字段并将它们导出到文件中。我现在想加密那个文件,并且已经有了加密器。问题是我不能调用它。这是我的加密器代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.*;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.spec.SecretKeySpec;

public class FileEncryptor {

private String algo;
private File file;

public FileEncryptor(String algo,String path) {
this.algo=algo; //setting algo
this.file=new File(path); //settong file
}

 public void encrypt() throws Exception{
    //opening streams
     FileInputStream fis =new FileInputStream(file);
     file=new File(file.getAbsolutePath());
     FileOutputStream fos =new FileOutputStream(file);
     //generating key
     byte k[] = "HignDlPs".getBytes();   
     SecretKeySpec key = new SecretKeySpec(k,algo.split("/")[0]);  
     //creating and initialising cipher and cipher streams
     Cipher encrypt =  Cipher.getInstance(algo);  
     encrypt.init(Cipher.ENCRYPT_MODE, key);  
     CipherOutputStream cout=new CipherOutputStream(fos, encrypt);

     byte[] buf = new byte[1024];
     int read;
     while((read=fis.read(buf))!=-1)  //reading data
         cout.write(buf,0,read);  //writing encrypted data
     //closing streams
     fis.close();
     cout.flush();
     cout.close();
 }

 public static void main (String[] args)throws Exception {
     new FileEncryptor("DES/ECB/PKCS5Padding","C:\\Users\\*******\\Desktop\\newtext").encrypt();//encrypts the current file.
  }
}

这是我的文件创建者中未能调用它的部分:

FileWriter fWriter = null;
BufferedWriter writer = null;
try{
fWriter = new FileWriter("C:\\Users\\*******\\Desktop\\newtext");
writer = new BufferedWriter(fWriter);
writer.write(Data);
writer.close();
f.dispose();
FileEncryptor encr = new FileEncryptor(); //problem lies here.
encr.encrypt //public void that does the encryption.
new complete(); //different .java that is working fine.

好吧,我想我已经猜到了。感谢所有做出贡献的人。

4

5 回答 5

2

new在文件创建器中使用运算符时,您没有将任何内容传递给构造函数:

FileEncryptor encr = new FileEncryptor(); //problem lies here.

但是,您在测试时这样做mainFileEncryptor

new FileEncryptor("DES/ECB/PKCS5Padding","C:\\Users\\*******\\Desktop\\newtext").encrypt();//encrypts the current file.

传递适当的参数。

于 2013-11-06T21:41:22.953 回答
1

当您尝试创建新的 FileEncryptor 对象时,您必须使用您在 FileEncryptor.java 文件中实现的构造函数之一。像这样:

String anAlgo = "something";
String aPath = "something"'
FileEncryptor encr = new FileEncryptor(anAlgo, aPath);

希望这可以帮助。

于 2013-11-06T21:44:06.420 回答
0

您缺少 FileEncryptor 类的构造函数的参数。

这是你的构造函数。

public FileEncryptor(String algo,String path) {
    this.algo=algo; //setting algo
    this.file=new File(path); //settong file
}

但是您正在创建这样的对象。

FileEncryptor encr = new FileEncryptor(); //problem lies here.

您需要将要使用的加密算法名称和要加密的文件的路径传递给它。

Cipher 类获取您要用于加密的算法的实例。

Cipher encrypt =  Cipher.getInstance(algo);

浏览 Cipher 类的文档以查看支持的类型。链接在这里。 http://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html#getInstance%28java.lang.String%29

于 2013-11-06T22:14:10.150 回答
0

这个类中只有一个构造函数接受 2 个参数。这意味着对象创建机制需要 2 个参数。如果您需要创建一个没有这些参数的对象,您还可以提供一个无参数构造函数,除了 2 参数构造函数之外,public FileEncryptor(){//Default Constructor}但它没有任何意义,因为执行加密需要算法和路径

于 2013-11-06T21:49:56.007 回答
0

public FileEncryptor(String algo,String path)有两个参数的构造函数。编译器会自动为任何没有构造函数的类提供无参数的默认构造函数。但是一旦你声明了一个,你就不能调用空的构造函数,new FileEncryptor();除非你在类上下文中指定它:

public class FileEncryptor {

   private String algo;
   private File file;

   public FileEncryptor(String algo,String path) {
      this.algo=algo; //setting algo
      this.file=new File(path); //settong file
   }

   public FileEncryptor()
   {
        // your code here
   }
于 2013-11-06T21:52:24.303 回答