我正在使用Java中的客户端 - 服务器应用程序,它将使用私钥加密。
目前我有一个具有Cipher
类静态对象的类,我初始化如下:myCipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);
。
现在我的问题是:我有双向通信,我应该为每种方式分别有一个Cipher
对象(一个用于加密,一个用于解密)并使用相同的初始化向量?或者我应该使用相同的对象并根据我是加密还是解密来调用Cipher.init()
来更改模式?
在我的头脑中有单独的物体是有意义的,但我只是想确定。我试过谷歌搜索,但大多数例子只显示加密方式。
目前我将初始化向量发送到未加密的服务器,这是正确的,还是存在安全漏洞?
或者我是以完全错误的方式接近它?
感谢。
答案 0 :(得分:1)
你的问题有两个:
您应该使用一个对象。这节省了内存。但如果记忆力可以消耗,请继续使用两个。至少这会使你的代码更具可读性。
IV不需要加密。 IV是随机值,由发送方和接收方同步。关于IV最重要的一点是它不能用相同的键重复或重复使用!