我正在开发一款新软件,我希望对数据库中的值进行加密。我们正在使用 OrientDB 并尝试使用 tinkerpop 库来实现该项目。在这里我有点卡住了。
对于一个函数,我需要提取一个类型的所有顶点的列表并返回它们。我为 person 对象添加了带注释的接口,我现在添加了加密和解密必要字段的方法。但是当我解密它们时,它会将解密的值保存回数据库。
有没有办法覆盖getter和setter来处理加密/解密,或者我需要在执行解密之前从数据库中分离模型?
这是我的界面代码:
public interface iPerson {
@Property("firstName")
public void setFirstName(String firstName);
@Property("firstName")
public String getFirstName();
@Property("lastName")
public String getLastName();
@Property("lastName")
public void setLastName(String lastName);
@Property("id")
public String getId();
@Property("id")
public void setId(String id);
@Property("dateOfBirth")
public String getDateOfBirth();
@Property("dateOfBirth")
public void setDateOfBirth(String dateOfBirth);
@JavaHandler
public void encryptFields() throws Exception;
@JavaHandler
public void decryptFields() throws Exception;
public abstract class Impl implements JavaHandlerContext<Vertex>, iPerson {
@Initializer
public void init() {
//This will be called when a new framed element is added to the graph.
setFirstName("");
setLastName("");
setDateOfBirth("01-01-1900");
setPK_Person("-1");
}
/**
* shortcut method to make the class encrypt all of the fields that should be encrypted for data storage
* @throws Exception
*/
public void encryptFields() throws Exception {
setLastName(Crypto.encryptHex(getLastName()));
setFirstName(Crypto.encryptHex(getFirstName()));
if(getDateOfBirth() != null) {
setDateOfBirth(Crypto.encryptHex(getDateOfBirth()));
}
}
/**
* shortcut method to make the class decrypt all of the fields that should be decrypted for data display and return
* @throws Exception
*/
public void decryptFields() throws Exception {
setLastName(Crypto.decryptHex(getLastName()));
setFirstName(Crypto.decryptHex(getFirstName()));
if(getDateOfBirth() != null) {
setDateOfBirth(Crypto.decryptHex(getDateOfBirth()));
}
}
}
}