新しいソフトウェアの開発に取り組んでおり、データベースの値を暗号化したいと考えています。OrientDB を使用しており、tinkerpop ライブラリを使用してプロジェクトを実装しようとしています。ここで私は少し立ち往生しています。
1 つの関数では、ある型のすべての頂点のリストを取得して返す必要があります。個人オブジェクト用の注釈付きインターフェースがあり、必要なフィールドを今すぐ暗号化および復号化するメソッドを追加しました。しかし、それらを復号化すると、復号化された値がデータベースに保持されます。
その時点で暗号化/復号化を処理するためにゲッターとセッターをオーバーライドする方法はありますか、または復号化を実行する前にデータベースからモデルを切り離す必要がありますか?
私のインターフェースのコードは次のとおりです。
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()));
}
}
}
}