通过游戏客户端的 C++ Steam ID 身份验证

标签 c++ encryption server

基本上,我有一个游戏客户端和一个游戏服务器。

游戏客户端连接到服务器,将其 Steam ID 发送到服务器。

游戏服务器看到这是一个新的 Steam ID,所以它创建一行并将玩家信息(ip、名称、steam id)添加到玩家表中。

游戏服务器可以通过 Steam ID 禁止玩家。因此,下次玩家连接时,服务器会检查他们的 Steam ID 是否与表中的 ID 相同。如果它找到一个并且 Steam ID 被禁止,请断开播放器。

游戏服务器知道玩家 Steam ID 的唯一方法是让玩家使用 Steam API 并通过与 Steam 建立的 session 检索他的 Steam ID,然后将其作为字符串发送到游戏服务器。

但是,我有一个问题。仅发送 Steam ID 并不安全,因为被封禁的玩家可以简单地将发往服务器的数据包修改为另一个 Steam ID,从而“解除封禁”。

什么是安全的方式,我可以向我的游戏服务器发送类似 Steam ID 字符串的内容,并让服务器告知它是否被修改或是否按游戏客户端的预期发送?

我的游戏客户端使用 Game Maker: Studio,我的游戏服务器使用 C++

PS:我之前提过一个问题,但是描述不够,所以我重新做了一个。

最佳答案

在不知道你要问的确切内容的情况下,这里有一些伪装的想法......

我会让客户端首先与服务器进行“握手”,在服务器上接收“salt-of-the-day”(每天生成的 32 字节散列)。然后,客户端将采用该盐,加密客户端上的 steam_id,并将该数据传输到服务器,然后服务器将解密它并根据您的明文数据库对其进行验证。

但请记住,无论您实际进行多少加密,某个地方的某个人最终都会破解您的代码并能够挫败您最好的安全防御措施。

编辑

这是一个 LINK W/ SOURCE CODE描述了字符串的简单加密。现在代码在 C# 中,但我确信可以研究它以同样轻松地将它转换为 C++。

关于通过游戏客户端的 C++ Steam ID 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30809671/

相关文章:

c++ - 根据创建纹理的位置获取 "invalid texture"

c++ - 抛出一个右值

java - 提取文件中的值并将其转换为字符串以获得更多功能

.htaccess - 我可以只使用服务器IP而不使用域名来运行网站吗?

nginx - 什么是 .htaccess 的 nginx 等价物

c++ - 只有在一个参数中没有使用 std::function 时,模板函数替换才有效

java - 如何使用 AES 生成实际的加密文件? [JAVA]

ios - 在 iOS 上对用户隐藏注册码

java - tomcat重新加载jsp

c++ - 如何使用 OpenCV 检测大量白色像素的区域?