我是一名j2me程序员。我的项目与通过HTTP方法向服务器发送数据有关。我使用Bouncy Castle(Triple DES)加密j2me端的数据。我还维护服务器端编码。
然后在服务器端接收的数据被解密并存储在数据库中。
这里我在编码本身静态地假设密钥。在服务器端和j2me端,我使用相同的密钥值。
但是这里有一个基于要求的问题:密钥是随机生成的,用户不知道。
在这种情况下,如果在j2me部分用某个密钥加密数据,那么服务器如何在不知道密钥的情况下解密?
或者还有其他任何机制,请帮助解决问题。
谢谢和问候, Sivakumar.J
答案 0 :(得分:1)
有几种方法可以实现您的目标。
一种方法是使用某种形式的密钥交换/协议协议,例如Diffie-Hellman式密钥交换(参见http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)。当您处于J2ME环境中时,您可能希望使用最近使用Elliptic Curves的实现,因为它们对您的硬件要求更为温和。
实现目标的另一种方法是使用公钥证书实现安全密钥传输协议,但我不建议发明您自己的安全协议,而是使用专门为这些情况设计的SSL / TLS。
根据您的要求,您需要在其服务器身份验证(“单向SSL”)或其相互身份验证的表单(“双向SSL”)中使用SSL。有关正确设置SSL的信息,请参阅Web服务器的文档。
设置服务器后,只需在客户端上创建对称加密密钥(当前已完成),然后使用新设置的TLS连接将加密密钥发送到服务器。
Diffie-Hellman解决方案的优势在于它不一定涉及证书,但要安全地使用它,您需要实现某种形式的密钥派生函数(参见http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf),这也是非不重要的。因此,我建议使用第二种方法,即使它意味着更多的配置开销。