首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cipher对象可重用吗?

Cipher对象可重用吗?
EN

Stack Overflow用户
提问于 2011-01-27 20:32:40
回答 3查看 6K关注 0票数 14

由于getInstanceinit的方法参数不变,我可以在多个方法中使用相同的Cipher对象吗?

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-28 05:24:30

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

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

票数 -7
EN

Stack Overflow用户

发布于 2019-04-28 04:04:42

是。

正如文档中提到的:

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

票数 2
EN

Stack Overflow用户

发布于 2020-12-31 06:46:21

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

代码语言:javascript
复制
  SecretKey secretKey = new SecretKeySpec(key,baseAlgorithm);
  Cipher cipher = Cipher.getInstance(algorithm);
  IvParameterSpec ivSpec = new IvParameterSpec(iv);
  cipher.init(Cipher.ENCRYPT_MODE,secretKey,ivSpec);

其中:

  • key是一个字节array
  • baseAlgorithm是一个类似于"AES“的名称,适用于密钥类型
  • 是一个类似于”aes...“的名称
  • iv是初始化向量(字节数组)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4816319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档