Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java跨语言加密_Java_Object_Encryption_Connection_Inputstream - Fatal编程技术网

Java跨语言加密

Java跨语言加密,java,object,encryption,connection,inputstream,Java,Object,Encryption,Connection,Inputstream,我正在开发一款支持多人游戏的游戏,我想加密服务器-客户端连接。在使用SecretKey对象和ObjectInput/OutputStream之前,我已经完成了这项工作。但是,我想让其他语言能够连接到服务器(如果我使用另一种语言并想移植我的游戏)。有没有任何方法可以在不使用Java对象的情况下对所有数据进行加密,以便任何语言都可以使用它?与大约六年前一样,我序列化了对象(因此它是一个字符串)将字符串转换为字节数组,对字节进行加密,并将数据作为字节发送。另一端则将过程颠倒过来。我把它用于Java服务

我正在开发一款支持多人游戏的游戏,我想加密服务器-客户端连接。在使用SecretKey对象和ObjectInput/OutputStream之前,我已经完成了这项工作。但是,我想让其他语言能够连接到服务器(如果我使用另一种语言并想移植我的游戏)。有没有任何方法可以在不使用Java对象的情况下对所有数据进行加密,以便任何语言都可以使用它?

与大约六年前一样,我序列化了对象(因此它是一个字符串)将字符串转换为字节数组,对字节进行加密,并将数据作为字节发送。另一端则将过程颠倒过来。我把它用于Java服务器和AS3客户机之间的加密通信。但对于不支持字节数组的语言来说,这是行不通的。需要更多详细信息吗?

您可以使用该接口在Java中创建自己的自定义对象序列化程序。自定义序列化程序可以写出Java对象的状态,以便其他语言可以读取它们。我已经实现了这个项目,在这个项目中,我需要序列化才能工作,即使对象发生了变化,旧的状态需要被读回。自定义序列化的痛苦之处在于必须仔细跟踪对象字段,否则反序列化方法会产生奇怪的错误。

二进制对象序列化 您需要采取的一个操作是将对象序列化为二进制格式。您可以使用标准的序列化API来实现这一点,也可以创建自己的编码器/解码器。确保你详细描述了自己的协议——每一点都应该被描述,否则你会遇到麻烦——如果不是直接描述的话,那么几年后

有标准化的方法或使用二进制编码(如ASN.1)创建您自己的协议,但如果您采用这种方法,则会有一个相当陡峭的学习曲线。不过,使用tag/length/value作为值的总体思路是很好的,因此您可以看看例如BER/DER编码

序列化对象的加密 要加密,您可以创建自己的加密协议。这个论坛上的大多数人都走这条路,大多数人都失败了。他们设法使协议正常工作,但也留下了多个安全漏洞

保护传输中数据的最佳方法之一是TLS。因此,如果TLS适用,请尽一切努力走这条路线。在初始设置之后,TLS的开销相对较低,因此可能不需要尝试和实现与之竞争的专有协议


您还可以在应用程序级别而不是传输级别进行加密。解决这一问题的一个办法是依靠以前的加密constainer格式标准。众所周知的格式是CMS(以前称为PKCS#7)或PGP。PGP和CMS格式在Bouncy Castle库中实现。它们都是二进制格式,里面有很多选项。

我非常理解这一点,但是你是如何加密/解密字节的?我所看到的每一种加密算法都是在字节块上工作的。如果您使用128字节的加密算法,则获取字节数组并一次处理128字节,等等。您能否指出答案中缺少什么?