密码对象是否可重用?

2022-09-03 16:17:40

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

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

是否真的值得担心多次创建(这可能会导致创建,对象)?CipherKeySpecSecretKey


答案 1

是的。

如文档所述:

完成后,此方法将此密码对象重置为之前通过调用 init 进行初始化时的状态。也就是说,对象被重置,可用于加密或解密(取决于在调用 init 中指定的操作模式)更多数据。


答案 2

是的,但是...为什么?也就是说,使用任何算法的“新密码”实现的开销几乎为零。“init()”调用有更多的开销,无论如何都必须重做,如下所示:

  SecretKey secretKey = new SecretKeySpec(key,baseAlgorithm);
  Cipher cipher = Cipher.getInstance(algorithm);
  IvParameterSpec ivSpec = new IvParameterSpec(iv);
  cipher.init(Cipher.ENCRYPT_MODE,secretKey,ivSpec);

哪里:

  • 是一个字节数组
  • baseAlgorithm 是一个类似于“AES”的名称,适用于密钥类型
  • 算法是一个类似于“AES...”的名称。
  • iv 是初始化向量(字节数组)

推荐