繁体   English   中英

Java通过TCP的可序列化安全性

[英]Java serializable security over TCP

我有一个TCP/IP聊天应用程序,它来回发送包含消息的int类型和String消息的ChatMessage对象。

我的问题是:如何使它更安全?

谢谢!

我可以想到两种方法: CipherOutputStreamSSLSocket

CipherOutputStream

byte[] keyBytes = "1234123412341234".getBytes();
final byte[] ivBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 
     0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; //example

final SecretKey key = new SecretKeySpec(keyBytes, "AES");
final IvParameterSpec IV = new IvParameterSpec(ivBytes);
final Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding"); 
cipher.init(Cipher.ENCRYPT_MODE, key, IV);

//assuming your Socket is called "socket"
CipherOutputStream cstream = new CipherOutputStream(socket.getOutputStream(), cipher);
... 
//code to write ChatMessage object

或者,您可以使用SSL: 如何进行SSL套接字编程

假设您需要一个提供数据ConfidentialityIntegrityUser Authenticity的安全系统,这就是使用伪代码进行User Authenticity http://en.wikipedia.org/wiki/Information_security )。 无论如何,这些都是对安全聊天系统的一般要求。

  1. 使用公钥加密为每个公钥/私钥对
  2. 首次在2个用户之间开始聊天时,用户A生成一个对称密钥 SK,该密钥用于加密他与用户B之间的消息。
  3. 用户A用B的公钥加密SK并将其发送给B
  4. B解密SK,现在他们使用SK加密它们之间的进一步消息。

现在,您可以学习这些概念,并且它们很容易实现。 对于算法,最受欢迎的是:

  1. RSA用于公钥加密
  2. AES用于对称密钥加密

这两种算法都有可用的Java实现,请查看Bouncy Castle加密API软件包。

注意:如果您使用的是Web应用程序,并且只需要安全地传输消息,则可以按照注释中的建议使用SSL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM