Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同一类设计的加密/解密版本_Java_Design Patterns_Encryption_Decorator - Fatal编程技术网

Java 同一类设计的加密/解密版本

Java 同一类设计的加密/解密版本,java,design-patterns,encryption,decorator,Java,Design Patterns,Encryption,Decorator,这是一个设计问题,我将尽量缩小范围,避免将其标记为开放式 问题 需要一种有效的方法来设计一个或两个包含相同数据的类,但其中一个类将数据字段作为加密字符串,而第二个类将其作为解密字符串或整数。我收到加密的数据,对其解密一次,并允许我的应用程序使用解密版本。 我拥有的 我提出了不同的解决方案,但对其中任何一个都不满意。这就是我所尝试的: 一个带有布尔标志“encrypted”的类,最初设置为“true”,然后在数据解密后取消设置。缺点是,相同的字段被多次使用,即使有私有标志,听起来也不安全;另一个缺

这是一个设计问题,我将尽量缩小范围,避免将其标记为开放式

问题

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

我拥有的

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

  • 一个带有布尔标志“encrypted”的类,最初设置为“true”,然后在数据解密后取消设置。缺点是,相同的字段被多次使用,即使有私有标志,听起来也不安全;另一个缺点是,一些字段在解密后是不同类型的,比如ID,理想情况下,我希望解密后的版本是正确的最终类型,这样就无法将新字段添加到同一个类中,这会使它变得混乱,并使数据绑定等其他任务变得复杂
  • 考虑了decorator模式,但它的工作方式是让decorator和subject类实现相同的接口,但在解密后返回类型会有所不同
  • 考虑有两个类,一个用于类的解密版本,另一个用于加密版本。然而,在这种方法中,代码重用被放弃了,以修复关于让解密版本扩展加密版本的想法,并重用加密字段的getter,这些字段在解密后不改变类型,但改变类型的字段不能被重写
  • 考虑过即使在解密后仍将数据保留为字符串格式,并将其转换为类外的整数,但这是多余的,每当我需要使用类的整数字段时,就会用愚蠢的代码片段将代码弄得乱七八糟

  • 关于如何着手解决这个设计问题,有什么想法吗?

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

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

    您不能使用第四种解决方案并让get方法适当地转换它们吗?例如,
    String decryptedInt=“31415”
    public int getDecryptedInt(){return Integer.valueOf(decryptedInt)}
    ?类不包含数据(当然,元数据除外),类的对象实例可能包含数据。事实上,这就是我最后做的,在与队友讨论后,我们得出了您的结论。谢谢