我有一个套接字服务器,编写C ++,以及PHP中的API客户端,用于注册特殊位置的新用户。 为了验证来自PHP客户端的请求,我将使用带有唯一密钥的HAMC哈希,该密钥仅由API客户端和套接字服务器知道。
PHP客户端通过HTTP POST将内容作为JSON发送,然后Socket Server读取并处理此内容。 这很好。
现在,我的问题。 我有三个字段,我将哈希: 消息(字符串) objectIDs(整数数组) 型(String)
我如何为这三个字段创建一个哈希? 当我使用JSON时,JSON的字符串可能在PHP和C ++(https://github.com/nlohmann/json)或更多选项卡,空格或其他内容中没有相同的排序吗?
作为一个小信息,消息可以包含任何字符。
目前我使用此
class Event {
var name: String
var startTime: String
var endTime: String
init(name: String) {
self.name = name
self.startTime = "" //or some other sensible default before loading
self.endTime = "" //or some other default
}
}
有人告诉我,这个sigining并不是唯一的,并且应该可以通过一条特殊的消息表明系统会创建一个错误的哈希。 (但目前他无法到达) 在我的测试中,我无法重现它。 现在我希望其他人可以帮助我。
答案 0 :(得分:0)
如果字符串相等,则哈希值相等。
也就是说,该JSON的方面是散列的错误选择是正确的:语义相同的JSON对象可以有不同的字符串表示。
但是,在Internet上,您应该期望字符串表示形式也很复杂,具体取决于所涉及的计算机的区域设置。如果语言环境相同,一切都很好(选择UTF-8到处都有效)。但是,我希望PHP将字符串转换为服务器的语言环境。这可以更改字符串的位表示(类似于JSON问题)。因此,请确保两者都在相同的区域设置中工作,并且这样的魔法永远不会干扰您的系统。