Java加密的聊天客户端没有过关联

时间:2012-08-22 18:01:22

标签: java sockets

所以我制作了一个严重依赖安全性和加密的基本聊天应用程序。我在使一切工作在一起时遇到了一些问题。

我已经设法在客户端和服务器之间建立连接,但我也想让他们共享一个共同的密码,他们将用它来解密整个聊天会话,所以只有那两个人才会查看它。此外,密码永远不会通过电线传输,以增加安全性。这是我的问题开始的地方。

一旦我的客户端和服务器连接,服务器就会发送一个用户指定的质询,这个质询基本上是客户端需要解密并发回的字符串,然后服务器会看到它是否匹配,以及它是否进行通信将继续,就像WiFi中的WPA加密一样。

我的加密设置是AES,我有一个字符串和一个密钥,然后整个东西被加密并解码成Base64,然后发送。解密时,该过程显然会逆转。服务器设法正常发送所有内容,但客户端在解密时返回null,即使它正确接收加密的字符串。我基本上有一个类充当客户端或服务器,具体取决于用户的选择。

下面是一些代码/堆栈跟踪: 服务器输出:KCcOYuXTUD6SaXJQ4qIn7Q ==               的HelloWorld

客户输出:KCcOYuXTUD6SaXJQ4qIn7Q ==               空

加密/解密方法:http://pastebin.com/TtErYyz6

套接字写作/阅读方法:http://pastebin.com/73QcQxva

客户端的Stacktrace:http://pastebin.com/NdexZdyV 注意:当逐行调试时,它只是在插槽pastebin链接

中停止了27

希望我已经包含了足够的细节来获得解决方案:P 感谢您的帮助,我一直在努力完成这个项目,即使有些功能是不必要的,我仍然会尝试在适用的地方实施它们,以便在下个月开始编程学位时尽可能多地学习

完整代码:http://pastebin.com/xkunfX37

1 个答案:

答案 0 :(得分:1)

我在主机验证码(verifyHost功能)中发现了一些问题。

首先,字符串比较很棘手:

if(tempChallenge == decryptedChallenge){

您正在将字符串与==进行比较,这只有在它们是相同的字符串对象时才有效。使用String.equals函数进行适当的字符串比较:

if( decryptedChallenge.equals(tempChallenge) ){

其次,输入流也很棘手。您正在从输入流中读取所有内容,然后尝试阅读更多内容。服务器在挑战中向客户端发送一行,并期待一行。客户端读取3行。

第三,服务器代码中的CPU进入循环。它将消耗大量的CPU,并且调用in.readline()将阻塞并等待任何输入。

while(!in.ready()){} // you can drop this line.

以下是带有修改后代码的pastebin:http://pastebin.com/JxazrA0G