Cipher对象是否可重用?

Fir*_*fox 13 java encryption performance

我可以Cipher跨多个方法使用相同的对象,因为方法参数getInstanceinit不更改?

例如,假设应用程序的多个部分decrypt在实用程序类中使用该方法.传递的所有加密值都使用相同的密钥和算法生成.那么,我可以重用同一个Cipher对象吗?

是不是真的值得担心的多个作品Cipher(这可能导致创建KeySpec,SecretKey对象)?

ZZ *_*der -8

您可以重复使用密码对象,但每次都必须通过为每个操作调用 init() 来初始化它。

如果您担心重新创建 KeySpec,则应该保存它并在多个 init() 中使用相同的值。

  • 正如 doFinal() 的 Javadocs 明确指出的那样,“完成后,此方法将此密码对象重置为之前通过调用 init 初始化时的状态。也就是说,该对象被重置并可用于加密或解密(具体取决于在调用 init 中指定的操作模式上)更多数据。” (9认同)
  • 格雷格是正确的。这个答案是错误的。不幸的是,stackoverflow 向导不允许我撤消我的错误投票,因为它现在已“锁定”。糟糕的设计选择向导。 (5认同)
  • 来自 init() 的 Javadocs:“请注意,当初始化 Cipher 对象时,它会丢失所有先前获取的状态。换句话说,初始化 Cipher 相当于创建该 Cipher 的新实例并对其进行初始化。” (2认同)