我正在使用Java的客户端-服务器应用程序进行工作,该应用程序将使用私钥加密 。
当前,我有一个带有Cipher
类静态对象的类,该对象初始化如下: myCipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);
。
现在我的问题是:我有双向通信,是否应该为每种方式使用一个单独的Cipher
对象(一种用于加密,一种用于解密)并使用相同的初始化矢量? 还是应该仅使用同一个对象并调用Cipher.init()
来更改模式,具体取决于我是加密还是解密?
脑子里有分开的物体是很有意义的,但是我只是想确定一下。 我尝试使用谷歌搜索,但大多数示例仅以一种方式显示加密。
当前,我将初始化向量未加密地发送到服务器,这是正确的还是存在安全漏洞?
还是我完全以错误的方式进行处理?
谢谢。
您的问题有两个:
您应该使用一个对象。 这样可以节省内存。 但是,如果内存可用,请继续执行两个。 至少这将使您的代码更具可读性。
IV不需要加密。 IV是一个随机值,由发送方和接收方同步。 关于IV的最重要的事情是,不能使用相同的密钥重复或重复使用它!