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