我正在尝试将消息从 Javascript 客户端传递到 PHP 网络服务器。为了增加一层安全性,我想用哈希对数据对象进行签名。
/* Generate signature of the data with the password */
that.signEnvelope = function(data,password)
{
return CryptoJS.SHA256(JSON.stringify(data) + password).toString();
};
这很快在服务器上崩溃了。JSON.stringify 函数不会为服务器上的 json_encode 生成 1:1 匹配的字符串,因此无法验证哈希。
protected function verifySignature($remoteSignature,$data,$privateKey)
{
/* Combine json & key samen , then sha256 */
$localSignature = hash('sha256',json_encode($data) . $privateKey);
return ($localSignature === $remoteSignature);
}
是否有另一种我可以在 PHP 和 Javascript 中实现的算法来生成可散列的字符串?
结论
允许跨平台的 json_encode 并不是一件明智的事情。没有标准的实现。
相反,我现在只允许带有字符串键/值对的数组,它们更容易连接和验证。