Java 通过自实现的crypter类加密和解密对象

Java 通过自实现的crypter类加密和解密对象,java,encryption,Java,Encryption,我被一项作业弄糊涂了:D 给定一个UML图,我必须实现一个课程管理应用程序,其中一部分是学生类,如下所示 public class Student extends Person implements Encryptable { private String program; private Vector<Course> courses; //constructor. public Student(String Name, String pnr, S

我被一项作业弄糊涂了:D 给定一个UML图,我必须实现一个课程管理应用程序,其中一部分是学生类,如下所示

    public class Student extends Person implements Encryptable {
    private String program;
    private Vector<Course> courses;

//constructor. 
    public Student(String Name, String pnr, String tel, String prog) {
            super(Name, pnr, tel);
            program = prog;
            courses = new Vector<Course>();
        }
/* implementation of related methods 
  ......  */

        @Override
    public void encrypt(String password) {
    }

    @Override
    public void decrypt(String password) {  
    }
public interface Encryptable {

    public void encrypt(String password);
    public void decrypt(String password);
}
在前面的一个任务中,我实现了一个类“PassworCrypter”,我应该使用这个类

public class PasswordCrypter {
    Cipher ecipher;
    Cipher dcipher;
    SecretKey key;
    DESKeySpec dks;
    SecretKeyFactory skf;
    byte[] psword;

    public PasswordCrypter(String password) {

        try {
            psword = password.getBytes("UTF-16");
            dks = new DESKeySpec(psword);
            skf = SecretKeyFactory.getInstance("DES");
            key = skf.generateSecret(dks);
            ecipher = Cipher.getInstance("DES");
            ecipher.init(Cipher.ENCRYPT_MODE, key);
            dcipher = Cipher.getInstance("DES");
            dcipher.init(Cipher.DECRYPT_MODE, key);
        } catch (NoSuchAlgorithmException e) {
            throw new CrypterException(e);
        } catch (NoSuchPaddingException e) {
            throw new CrypterException(e);
        } catch (InvalidKeyException e) {
            throw new CrypterException(e);
        } catch (InvalidKeySpecException e) {
            throw new CrypterException(e);
        } catch (UnsupportedEncodingException e) {
            throw new CrypterException(e);
        }

    }

    public byte[] encrypt(byte[] array) {

        try {
            return ecipher.doFinal(array);
        } catch (IllegalBlockSizeException e) {
            throw new CrypterException(e);
        } catch (BadPaddingException e) {
            throw new CrypterException(e);
        }
    }

    public byte[] decrypt(byte[] array) {

        try {
            return dcipher.doFinal(array);
        } catch (IllegalBlockSizeException e) {
            throw new CrypterException(e);
        } catch (BadPaddingException e) {
            throw new CrypterException(e);
        }
    }
}
我应该在学生的本地字段和继承字段上使用PasswordCrypter类 班级。当学生对象被加密时,应该无法获取数据 比如一个学生的名字没有先调用解密。学生对象应该是 始终加密,除非您需要访问其任何数据。
谁能告诉我怎么加密这个该死的学生:)

我想你在
Encryptable
方面有问题。方法的签名应为

public void encrypt(Encrypter enc);
public void decrypt(Decrypter dec);
您可以在其中定义两个独立的接口
加密机
解密机
。最后,您可以使用
PasswordCrypter
作为实现这两种方法的中心类

 public class PasswordCrypter implements Encrypter,Decrypter  {
所以现在在你的学生课堂上你可以

public void encrypt(Encrypter enc) {
   byte[] programbytes = enc.encrypt(program);
}

public void encrypt(Decrypter dec) {
   program = dec.decrypt(programbytes);
}

我想您在
可加密
方面有问题。方法的签名应为

public void encrypt(Encrypter enc);
public void decrypt(Decrypter dec);
您可以在其中定义两个独立的接口
加密机
解密机
。最后,您可以使用
PasswordCrypter
作为实现这两种方法的中心类

 public class PasswordCrypter implements Encrypter,Decrypter  {
所以现在在你的学生课堂上你可以

public void encrypt(Encrypter enc) {
   byte[] programbytes = enc.encrypt(program);
}

public void encrypt(Decrypter dec) {
   program = dec.decrypt(programbytes);
}

为什么你问问题时会崩溃?这太有趣了吗?给你布置任务的人,很抱歉,都是白痴。学生不是可加密的。我周围住着很多学生,当我问他们是否可加密时,没有人回答。即使它们存在,在它们已经存在之后,解密它们也是相当棘手的。像这样的OO设计是软件管理的祸害之一,任何教授这种实践的人都应该受到惩罚。为什么你在问问题时会崩溃?这太有趣了吗?给你布置任务的人,很抱歉,都是白痴。学生不是可加密的。我周围住着很多学生,当我问他们是否可加密时,没有人回答。即使它们存在,在它们已经存在之后,解密它们也是相当棘手的。像这样的面向对象设计是软件管理的一大祸害,任何教授这种实践的人都应该受到惩罚。这是我的主要问题,这个接口是作为一个任务而给出的。我们不应该改变它如果你不能改变它,那么你需要在每个类中使用你的
PasswordCrypter
实例:)谢谢你,我认为它现在可以工作了,如果我的Junit测试正常,至少在Junit测试中可以工作。不仍然有任何主要的,耶,这是我的主要问题,这个接口是作为一个prat的分配。我们不应该改变它如果你不能改变它,那么你需要在每个类中使用你的
PasswordCrypter
实例:)谢谢你,我认为它现在可以工作了,如果我的Junit测试正常,至少在Junit测试中可以工作。没有任何主要的,