使用随机生成的密钥进行加密和解密?
我是一个j2me程序员。我的项目涉及通过HTTP方法将数据发送到服务器。我使用Bouncy Castle(Triple DES)对j2me端的数据进行加密。我也维护服务器端编码。使用随机生成的密钥进行加密和解密?
然后,在服务器侧接收到的数据被解密并存储在数据库中。
这里我假设静态编码本身的关键。在服务器端和j2me端,我使用相同的键值。
但这里有一个基于要求的问题:密钥是随机产生的,用户不知道。
在这种情况下,如果在J2ME部分加密与一些主要的服务器然后解密如何在不知道密钥的数据?
或者有其他的机制是存在的,所以请帮助解决这些问题。
感谢和问候, Sivakumar.J
有几种方式来实现自己的目标。要做到这一点
一种方法是使用某种形式的密钥交换/协定协议,例如的Diffie-Hellman式密钥交换(参见http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)。由于您在J2ME环境中,您可能希望使用最近使用椭圆曲线的实现,因为它们对硬件要求更加温和。
实现您的目标的另一种方法是使用公钥证书实现安全的密钥传输协议,但我不建议发明自己的安全协议,而是使用专为这些情况设计的SSL/TLS。
根据你的要求,你要么需要在其服务器进行身份验证(“单向SSL”),或在其相互认证形式(“双向SSL”)使用SSL。有关正确设置SSL的信息,请参阅您的Web服务器的文档。
一旦设置了就足够了在客户端上创建对称加密密钥,因为它是目前完成的,然后发送加密密钥使用新设立的TLS连接的服务器的服务器。
Diffie-Hellman解决方案的优点是它不一定涉及证书,但要安全地使用它,您需要实现某种形式的密钥派生函数(参见http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf),这又是非平凡的。因此,我建议使用第二种方法,即使这意味着更多的配置开销。
我认为需要某种形式的[公钥加密/非对称加密](http://en.wikipedia.org/wiki/Public-key_cryptography):“......与对称密钥算法不同,公钥算法不需要在发送者和接收者之间安全地初始交换一个或多个密钥......“。 – 2011-05-20 04:53:36
使用公钥加密交换某种对称密钥(您的3DES密钥)的会话密钥。 – 2011-07-04 02:09:08