Java 加密和反编译
我即将把我的Android应用程序投放市场。我最近加密了所有服务器/客户端通信。我想知道的是,如果我的数据是使用专用密钥加密的,如果有人反编译我的代码并提取密钥,那么首先加密数据是否值得?当数据没有加密时,我的通信速度要快得多。由于游戏是一款动作游戏,lag将成为一个巨大的“乐趣杀手”,从经验来看,我知道这是令人沮丧的。我知道加密使应用程序更加安全,它使游戏玩家和服务器更加安全,但它会造成巨大的延迟。安全性是否值得在性能上扣除?当您的代码可以反编译时,是否值得使用加密?我已经在使用Android Proguard,但如果有人真的想反编译我的代码,他们会花时间对所有垃圾进行排序。你把加密密钥放在客户端代码中了吗?那是毫无价值的,另一方面,加密是完全值得的,问题是你选择了错误的方法。我认为,在这些假设下操作是安全的Java 加密和反编译,java,encryption,decompiling,Java,Encryption,Decompiling,我即将把我的Android应用程序投放市场。我最近加密了所有服务器/客户端通信。我想知道的是,如果我的数据是使用专用密钥加密的,如果有人反编译我的代码并提取密钥,那么首先加密数据是否值得?当数据没有加密时,我的通信速度要快得多。由于游戏是一款动作游戏,lag将成为一个巨大的“乐趣杀手”,从经验来看,我知道这是令人沮丧的。我知道加密使应用程序更加安全,它使游戏玩家和服务器更加安全,但它会造成巨大的延迟。安全性是否值得在性能上扣除?当您的代码可以反编译时,是否值得使用加密?我已经在使用Android
- 无法信任客户端。永远
- 服务器是权威的信息源
加密是可以的,但当它不损害游戏或游戏性时(在您的情况下是这样的)。我可能会使用身份验证而不是加密(散列您发送的所有数据,以便您可以在服务器端验证它)。这将适用于普通的游戏信息,因为不太需要保密。除非您发送的是私人用户信息,如姓名、年龄、信用卡信息等,否则我建议您使用比加密快得多的普通身份验证。你可以使用非常简单的散列函数,或者如果你认为你的游戏真的会激发人们去篡改它,那么你可以使用军事级别的散列函数,比如SHA-256或更高。但是,无论您使用哪种哈希方案,它都应该比实现正确的加密方案要节省大量的时间/资源。我如何“验证”从客户端发送的数据?当然,这取决于您的游戏逻辑。如果是,比如说,现代战争3,你可以检查玩家的速度,如果他站着的话,不超过X单位/秒,如果他驾驶车辆的话,不超过Y单位/秒。他最大的问题是他没有“真的”使用加密,而仅仅是“混淆”东西,关键就在代码中。@daniel是的,但从技术上讲,它可以是对称加密(我们不确定它是什么)。我使用加密来完成所有的加密/decrypting@john首先,从代码中取出所有加密密钥。考虑做一些公开密钥加密,或者在客户端之间进行diffie helmen加密,但是没有两个客户端应该有相同的密钥。你可以发布一些示例代码来告诉我你将如何做到这一点吗?@john你否决了答案,并要求提供代码??如果你认为答案是错误的,应该投否决票,我没问题,但那你为什么要要求代码呢?因为我没有投反对票,我认为这是回答的一个良好开端,我只是想更详细地说明,如果你详细说明,我会支持voteI,因为你的努力和你的信息,谢谢你的帮助!