Java 图像应该从服务器发送到客户端还是留在客户端

Java 图像应该从服务器发送到客户端还是留在客户端,java,swing,security,server,client,Java,Swing,Security,Server,Client,我正在用爪哇做一个21点游戏, 我不确定是应该每次都将卡片的图像从服务器发送到客户机,还是将所有图像文件放入客户机并使用它们的名称 一方面,发送图像可能会让编程变得更混乱,让程序运行得更慢, 但另一方面,我不想让客户从他这边把事情搞砸。 这段代码不是用于生产的,但我必须强调安全性和稳定性 我很高兴听到你的意见,谢谢:)你走对了路。如果你发送图像,它会减慢你的应用程序,并使代码更加复杂。如果从本地repo加载图像,用户可以用自己的图像替换这些文件 如果您关注的是安全性,那么可以将文件放在本地并对其

我正在用爪哇做一个21点游戏, 我不确定是应该每次都将卡片的图像从服务器发送到客户机,还是将所有图像文件放入客户机并使用它们的名称

一方面,发送图像可能会让编程变得更混乱,让程序运行得更慢, 但另一方面,我不想让客户从他这边把事情搞砸。 这段代码不是用于生产的,但我必须强调安全性和稳定性


我很高兴听到你的意见,谢谢:)

你走对了路。如果你发送图像,它会减慢你的应用程序,并使代码更加复杂。如果从本地repo加载图像,用户可以用自己的图像替换这些文件

如果您关注的是安全性,那么可以将文件放在本地并对其进行加密。很难(读取:不可能)将文件替换为在没有密钥的情况下正确解密的图像。但是,攻击者可以切换卡片(即,仅通过更改文件名即可将ace替换为10)。为了避免这种情况,不只是加密消息,而是加密元组(卡值、图像)。这样,您可以在解密后验证该值是否为您期望的值。如果没有人知道用于加密/解密的密钥,那么这一切都很好。因此,您需要隐藏密钥(通过网络发送、在内存中隐藏等)。此外,加密和解密确实需要时间,所以它会减慢你的应用程序。这不会像通过网络发送图像时那样明显,但它会出现


<>如果你沿着发送图像的路径走下去,仍然有可能的攻击向量。攻击者可以截获网络包并向您的客户端发送不同的映像。为了避免这种情况,您需要使用加密协议。许多常用协议都有加密选项。

您是否希望计划并让客户机以卡的形式提供自己的图像?喜欢定制主题吗?如果是,那么留在客户身上是有意义的。您始终可以在第一次运行/安装时复制/下载。Stackoverflow旨在帮助您解决现有代码中的编码问题,而不是讨论设计。也许对这类问题来说是个更好的地方。答案是肯定和否定。为什么?因为它取决于更多的背景,也取决于你想要实现什么。您是否希望向用户提供可随时间更新的包装设计选择?例如这些设计决策将影响你如何管理这方面的事情。如果你从服务器下载图像,你应该考虑缓存它们,这样你就不需要每次下载它们,如果服务器不使用从客户端发送的任何信息,除了他的动作(双击,在二十一点通过)会怎么样?我的意思是,如果服务器正在管理卡片和价值观,而客户机只是获取图像名称并将其显示给玩家,然后客户机发送他的移动,该怎么办?在这种情况下,如果客户更改图片名称,则图像只会在其一侧更改,我错了吗?@heapoverflow是和否。理论上,他们只能更改其一侧的图片,但如果这就是您所关心的,则从本地或远程源加载图像并不重要。两者的结果都只是改变了屏幕上的图像。想象一个在线赌场。你可以改变照片,这样看起来你本应该赢,但却输了。然后要求退款。此外,图像库的安全性也不高,这意味着它们可能会加载一个破坏jpg库并运行任意代码的图像。这就是病毒隐藏在一些在线广告中的方式。请注意,您不能“隐藏密钥”,因为它需要用于解密接收到的任何内容。客户机拥有该密钥,可以使用它做任何事情,例如,它可以加密一个新的数据组(如果它是对称密钥-如果不是,攻击者可以将客户机上的密钥替换为他同时拥有私有和公共部分的密钥)。TL;医生:这是不安全的。用户可以完全控制客户机以及提供给客户机的任何内容。@Gabor Yeah。它位于用户空间中。他们可以附加一个调试器并做任何他们想做的事情。我们正试图使其尽可能安全,并表明我们已经仔细考虑了攻击向量。如果他们可以使用调试器,他们就可以更改执行指针并运行任意代码,因此担心他们从内存中获取代码并不是我们真正应该关注的。