首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java跨语言加密

Java跨语言加密
EN

Stack Overflow用户
提问于 2014-01-17 14:53:34
回答 2查看 126关注 0票数 0

我正在工作的游戏,有多人支持,我想加密服务器-客户端连接。在使用SecretKey对象和ObjectInput/OutputStream之前,我已经这样做了。但是,我希望保留其他语言连接到服务器的能力(如果我曾经使用另一种语言并希望移植我的游戏)。我是否可以在不使用Java对象的情况下加密所有数据,这样任何语言都可以使用它吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-18 12:06:59

二进制对象序列化

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

有标准化的方法,或者用ASN.1之类的二进制编码来创建自己的协议,但是如果你走了这条路,希望有一个相当陡峭的学习曲线。但是,使用标记/长度/值作为值的一般想法是一个很好的想法,因此您也许可以看看例如BER/DER编码。

序列化对象的加密

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

在传输中确保数据安全的最佳方法之一是TLS。所以如果TLS适用的话,一定要走这条路。在初始设置之后,TLS的开销相对较低,因此可能不需要尝试实现相互竞争的专有协议。

您也可以在应用程序级别加密,而不是传输级别。解决这一问题的一种方法是依赖以前的加密强制件格式标准。众所周知的格式是CMS (以前称为PKCS#7)或PGP。PGP和CMS格式是在Bouncy城堡库中实现的。它们都是二进制格式,其中有许多选项。

票数 0
EN

Stack Overflow用户

发布于 2014-01-17 15:08:04

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21188807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档