Unity客户端/ NodeJS服务器:如何签名和验证数据?
我也在Unity的论坛上发布了这个帖子,但是因为它更加面向服务器/加密,所以我也会问这里。
正如标题中提到的,我使用unity作为客户端,并使用socket.io(使用BestHTTP资产)连接到nodeJS服务器。
我想要实现的目标:user1获取由我的服务器签名的许可证密钥(通过电子邮件或w / e),在应用程序中输入密钥,客户端询问服务器密钥是否有效且已签名,如果是user1的电脑可以播放。这只需要在“注册”许可证密钥时需要互联网连接,然后我将密钥存储在散列文件中,以便用户1可以在不联系服务器的情况下播放。简化版本:user1只需连接一次(第一次启动应用程序),但我需要在每次启动时检查是否允许他玩。
客户端(在Unity c#中)工作正常,我所做的基本上是对密钥进行散列并将其存储在文件中,然后散列该文件以验证用户不会修改它。
但是,我不知道在服务器端做什么。有API可以达到我想要的目的吗?我走错了方向吗?这是我第一次处理加密,我有点迷失:困惑:
任何帮助将不胜感激 !
回答如下:前提
许可软件可能是一项简单或相当复杂的任务:对该请求没有“完美”的答案,主要是因为您选择的每种解决方案都会以某种(简单或困难)方式“破解”。
另外,特别是在处理密码术时,通常增加复杂性等于增加时间。我建议你关注的是你想要保护的东西的价值,这样你就可以决定什么是值得实施的。
许可
最简单的方法可能是实现一个数字签名证书,其中包含有关许可软件的所有信息(包括有助于您的系统识别恶意行为的其他数据)。使用RSA应该是一个很好的方法。
这是我在Stack Overflow上发现的关于这个想法的good answer(它是用C#编写的,但你可以分析架构并构建一个nodejs应用程序)。