1

我正在使用 Java 开发一个客户端-服务器应用程序,该应用程序将使用private-key encryption

目前我有一个类的静态对象Cipher,我像这样初始化:myCipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);.

现在我的问题是:我有双向通信,我是否应该Cipher为每种方式设置一个单独的对象(一个用于加密,一个用于解密)并使用相同的初始化向量?或者我应该只使用相同的对象并Cipher.init()根据我是加密还是解密来调用更改模式?

在我的脑海中拥有不同的对象是有道理的,但我只是想确定一下。我试过谷歌搜索,但大多数例子只显示加密的一种方式。

目前我将初始化向量发送到未加密的服务器,这是正确的,还是存在安全漏洞?

还是我以完全错误的方式接近它?

谢谢。

4

1 回答 1

2

你的问题有两个方面:

  1. 您应该使用一个对象。这样可以节省内存。但是,如果内存是可用的,请继续使用两个。至少这会让你的代码更具可读性。

  2. IV 不需要加密。IV 是一个随机值,由发送方和接收方同步。IV 最重要的一点是它不能重复或重复使用,使用相同的密钥!

于 2011-05-16T12:02:27.130 回答