由于getInstance和init的方法参数不变,我可以在多个方法中使用相同的Cipher对象吗?
例如,假设应用程序的多个部分在实用程序类中使用decrypt方法。所有传递的加密值都是使用相同的密钥和算法生成的。那么,我可以重用相同的Cipher对象吗?
是否真的值得担心多次创建Cipher (这可能会导致创建KeySpec、SecretKey对象)?
发布于 2011-01-28 05:24:30
您可以重用cipher对象,但每次都必须通过为每个操作调用init()来初始化它。
如果您担心重新创建KeySpec,那么应该保存它并在多个init()中使用相同的值。
发布于 2019-04-28 04:04:42
是。
正如文档中提到的:
完成后,此方法将此密码对象重置为先前通过调用init进行初始化时的状态。也就是说,对象被重置并可用于加密或解密(取决于在调用init时指定的操作模式)更多的数据。
发布于 2020-12-31 06:46:21
是的,但是..。为什么?也就是说,使用任何算法的"new Cipher“实现几乎没有任何开销。"init()“调用有更多的开销,无论如何都必须重做,如下所示:
SecretKey secretKey = new SecretKeySpec(key,baseAlgorithm);
Cipher cipher = Cipher.getInstance(algorithm);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE,secretKey,ivSpec);其中:
https://stackoverflow.com/questions/4816319
复制相似问题