Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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_Encryption_Decompiling - Fatal编程技术网

Java 加密和反编译

Java 加密和反编译,java,encryption,decompiling,Java,Encryption,Decompiling,我即将把我的Android应用程序投放市场。我最近加密了所有服务器/客户端通信。我想知道的是,如果我的数据是使用专用密钥加密的,如果有人反编译我的代码并提取密钥,那么首先加密数据是否值得?当数据没有加密时,我的通信速度要快得多。由于游戏是一款动作游戏,lag将成为一个巨大的“乐趣杀手”,从经验来看,我知道这是令人沮丧的。我知道加密使应用程序更加安全,它使游戏玩家和服务器更加安全,但它会造成巨大的延迟。安全性是否值得在性能上扣除?当您的代码可以反编译时,是否值得使用加密?我已经在使用Android

我即将把我的Android应用程序投放市场。我最近加密了所有服务器/客户端通信。我想知道的是,如果我的数据是使用专用密钥加密的,如果有人反编译我的代码并提取密钥,那么首先加密数据是否值得?当数据没有加密时,我的通信速度要快得多。由于游戏是一款动作游戏,lag将成为一个巨大的“乐趣杀手”,从经验来看,我知道这是令人沮丧的。我知道加密使应用程序更加安全,它使游戏玩家和服务器更加安全,但它会造成巨大的延迟。安全性是否值得在性能上扣除?当您的代码可以反编译时,是否值得使用加密?我已经在使用Android Proguard,但如果有人真的想反编译我的代码,他们会花时间对所有垃圾进行排序。

你把加密密钥放在客户端代码中了吗?那是毫无价值的,另一方面,加密是完全值得的,问题是你选择了错误的方法。

我认为,在这些假设下操作是安全的

  • 无法信任客户端。永远
  • 服务器是权威的信息源
不要信任客户端发送给您的数据,对其进行检查和验证(例如,如果有人试图通过发送修改后的位置从一个地图角“传送”到另一个地图角)

只接受有效的数据

禁止骗子


加密是可以的,但当它不损害游戏或游戏性时(在您的情况下是这样的)。

我可能会使用身份验证而不是加密(散列您发送的所有数据,以便您可以在服务器端验证它)。这将适用于普通的游戏信息,因为不太需要保密。除非您发送的是私人用户信息,如姓名、年龄、信用卡信息等,否则我建议您使用比加密快得多的普通身份验证。你可以使用非常简单的散列函数,或者如果你认为你的游戏真的会激发人们去篡改它,那么你可以使用军事级别的散列函数,比如SHA-256或更高。但是,无论您使用哪种哈希方案,它都应该比实现正确的加密方案要节省大量的时间/资源。

我如何“验证”从客户端发送的数据?当然,这取决于您的游戏逻辑。如果是,比如说,现代战争3,你可以检查玩家的速度,如果他站着的话,不超过X单位/秒,如果他驾驶车辆的话,不超过Y单位/秒。他最大的问题是他没有“真的”使用加密,而仅仅是“混淆”东西,关键就在代码中。@daniel是的,但从技术上讲,它可以是对称加密(我们不确定它是什么)。我使用加密来完成所有的加密/decrypting@john首先,从代码中取出所有加密密钥。考虑做一些公开密钥加密,或者在客户端之间进行diffie helmen加密,但是没有两个客户端应该有相同的密钥。你可以发布一些示例代码来告诉我你将如何做到这一点吗?@john你否决了答案,并要求提供代码??如果你认为答案是错误的,应该投否决票,我没问题,但那你为什么要要求代码呢?因为我没有投反对票,我认为这是回答的一个良好开端,我只是想更详细地说明,如果你详细说明,我会支持voteI,因为你的努力和你的信息,谢谢你的帮助!