C++ 用公钥解密游戏数据

C++ 用公钥解密游戏数据,c++,openssl,C++,Openssl,我正在构建一个游戏,它将地图和世界数据存储在设备上(包括tmx、json和Luna脚本) 我想保护这些文件,使它们不会被其他人编辑 我认为我最好创建一个自签名证书,将公钥存储在设备上,然后在使用私钥分发游戏之前对文件进行签名,在游戏中,使用设备上的公钥解密游戏 这种方法有两个问题(正如我在搜索网络时了解到的): 1.公钥/私钥不用于解密文件。我可以通过散列一个随机密钥来解决这个问题,然后将其用于AES加密。 2.应使用公钥进行加密,而不是私钥 所以我的问题是: 我处理文件的方法正确吗?(使用带哈

我正在构建一个游戏,它将地图和世界数据存储在设备上(包括tmx、json和Luna脚本)

我想保护这些文件,使它们不会被其他人编辑

我认为我最好创建一个自签名证书,将公钥存储在设备上,然后在使用私钥分发游戏之前对文件进行签名,在游戏中,使用设备上的公钥解密游戏

这种方法有两个问题(正如我在搜索网络时了解到的): 1.公钥/私钥不用于解密文件。我可以通过散列一个随机密钥来解决这个问题,然后将其用于AES加密。 2.应使用公钥进行加密,而不是私钥

所以我的问题是: 我处理文件的方法正确吗?(使用带哈希键的AES) 我遗漏了什么吗?可以使用私钥进行加密,然后使用公钥进行解密吗?或者,我可以做些什么来实现这一点

谢谢

您不应该加密数据。只需使用数字签名就可以了,比如DSA

如果允许任何人解密的话,加密是毫无意义的


另外,由于您可能不拥有某知名授权中心批准的签名,因此最好只为您网站上的所有文件提供哈希值。

您想要的是签名,而不是加密。您搞错了。pub/priv密钥正是您想要的。您可以使用私钥对地图进行加密,然后只有用户拥有的公钥才能解密/使用地图。他们将无法修改它们,因为他们无法重新加密它们。他们只有你的公钥,它无法解密自己加密的内容。@MarcB谢谢你的评论!我有点困惑-我可以用私钥加密地图吗?我已设法使用私钥对它们进行签名,但无法使用私钥对它们进行加密。可能吗?或者,我应该只对不加密的文件进行签名吗?您可以使用任意一种密钥进行加密。最重要的是,不能用加密时使用的密钥对文件进行解密。这就是为什么它们被称为公共和私人。这两者之间其实没有什么区别,只是有一点你必须保密。这没关系,但前提是你绝对确定用户拥有你的公钥的正确副本。或者,作恶者可以更改文件,生成一些新密钥,使用此“新”密钥对文件进行签名,并将“新”公钥提供给您的用户。