Java 通过自实现的crypter类加密和解密对象
我被一项作业弄糊涂了:D 给定一个UML图,我必须实现一个课程管理应用程序,其中一部分是学生类,如下所示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
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测试中可以工作。没有任何主要的,