好吧,我已经意识到我的错误了。解密后的签名以二进制形式返回,因此我需要执行以下操作:
bin2hex($decryptedSignature)
为了获得
sha1
搞砸奇怪的是,返回的签名哈希前面有30个额外字符,因此实际的Alexa哈希比较需要:
public function compareHashes($pem) {
$publicKey = openssl_pkey_get_public($pem);
openssl_public_decrypt(base64_decode($this->signature), $decryptedSignature, $publicKey);
$decryptedSignature = hex2bin($decryptedSignature);
return sha1($this->responseBody) === substr($decryptedSignature, 30);
}
无论如何,一旦我通过了Alexa认证,我将打开Alexa验证类的源代码,并在这里添加一个链接。
编辑
https://github.com/craigh411/alexa-request-validator