0

这是一个设计问题,我将尝试尽可能缩小范围以避免将其标记为开放式。

问题

需要一种有效的方法来设计一个或两个保存相同数据的类,但一个将数据字段作为加密字符串,第二个将它们作为解密字符串或整数。我收到加密的数据,我将其解密一次并允许我的应用程序使用解密的版本。

我所拥有的

我想出了不同的解决方案,但对其中任何一个都不满意。这是我尝试过的:

  1. 一个带有布尔标志 `encrypted` 的类,最初设置为 `true`,然后在数据解密后取消设置。缺点,相同的字段是多用的,即使有一个私有标志,听起来也不安全;另一个骗局,一旦解密,某些字段的类型就不同了,比如一个 ID,理想情况下,我希望解密的版本是正确的最终类型,这样就无法将新字段添加到同一个类中,这会使它变得混乱并且复杂化其他任务,如数据绑定等
  2. 想到了装饰器模式,但是它的工作方式是让装饰器和主题类实现相同的接口,但是解密后返回类型会有所不同
  3. 考虑有 2 个类,一个用于该类的解密版本,另一个用于加密。但是,在这种方法中放弃了代码重用,以解决让解密版本扩展加密版本并重用加密字段的 getter 的想法,这些字段在解密后不会更改类型,但更改类型的字段不能被覆盖
  4. 考虑过即使在解密后也以字符串格式保留数据,并在类之外转换为整数,但这是多余的,并且每当我需要使用类的整数字段时,都会用愚蠢的代码片段使我的代码混乱

关于如何解决这个设计问题的任何想法?

4

2 回答 2

1

将它们分开。将加密类视为消息类,将解密类视为实体对象。数据类型的变化和您将来应用的任何字段验证都将更易于管理。即使是像字段宽度这样简单的东西,在加密时也可能会更大。

于 2012-11-13T22:21:03.360 回答
1

加密字段的最佳方法是简单地序列化对象实例并加密结果流。要获取解密的对象实例,只需解密流并反序列化对象。

于 2012-11-14T00:30:26.553 回答