我可以在多个方法中使用相同的Cipher
对象,因为getInstance
和init
的方法参数不会更改吗?
例如,假设应用程序的多个部分在实用程序类中使用decrypt
方法。传递的所有加密值都使用相同的密钥和算法生成。那么,我可以重用相同的Cipher
对象吗?
真的值得担心Cipher
的多个创作(可能会导致创建KeySpec
,SecretKey
个对象吗?
答案 0 :(得分:0)
是的
如文档所述:
完成后,此方法将该密码对象重置为其状态 以前是通过调用init初始化的。那就是 对象被重置并且可以加密或解密(取决于 在调用init时指定的操作模式)更多数据。
答案 1 :(得分:0)
是的,但是……为什么?也就是说,使用任何算法的“新密码”实现的开销几乎为零。 “init()”调用有更多开销,无论如何都必须按如下方式重做:
SecretKey secretKey = new SecretKeySpec(key,baseAlgorithm);
Cipher cipher = Cipher.getInstance(algorithm);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE,secretKey,ivSpec);
哪里:
答案 2 :(得分:-5)
您可以重复使用密码对象,但每次都必须通过为每个操作调用init()来初始化密码对象。
如果您担心重新创建KeySpec,您应该保存它并在多个init()中使用相同的值。