需要针对小代码更改的设计建议

时间:2014-11-24 16:37:31

标签: java encryption

代码更改本身很简单,但我想了解实现它的最佳方法是什么;为什么。

我正在修改一个包含一个名为Fs的抽象类的包,它有一个抽象函数write(Path p, InputStream is, Long size)。此方法在各种类中实现,例如HttpFsHadoopFs等,每个类都负责处理相应目标上的文件写入操作。

write(..)中实现的

HadoopFs在结尾处进行检查,如果Long Size不等于写入的字节数(totalBytesWritten),则会引发错误。

现在在我的特定用例中;输入使用AES加密以及PKCS5填充进行加密。因此加密前的大小永远不会等于加密后的大小。如果我们使用公式paddedSize = size + (16 - (size%16))知道真实大小,则可以获得加密(填充)大小。然而,由于显而易见的原因,反之亦然。

现在我想在write的{​​{1}}末尾执行相同的检查,检查加密方法;如果存在PKCS5填充,则将HadoopFs转换为totalBytesWritten,然后然后根据输入参数totalBytesWrittenPlusPadding对其进行检查,以查看写入是否正确。

明智地做这个设计的最佳方式是什么?

  1. 我可以在名为Long Size的{​​{1}}中实现一个单独的函数,该函数带有一个名为HadoopFs的附加参数;我在其中检查PKCS5并检查之前添加字节。但这意味着writeEncrypted逻辑的其余部分基本上会在两个函数中重复。
  2. 我可以在名为String cipher的{​​{1}}中实现单独的抽象函数,并在write中覆盖它。但这意味着我必须在Fs
  3. 中做同样的事情
  4. 我可以更改writeEncryptedHadoopFs的参数以获取HttpFs参数。但是这会迫使任何人延长write来处理密码,即使他们不使用加密数据,所以它似乎不是一个优雅的解决方案
  5. 别的什么?
  6. 需要来自Java专业人士的建议!感谢。

0 个答案:

没有答案