You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP服务器实现App Attest时公钥SHA256哈希验证失败求助

解决App Attest验证第5步:公钥SHA256哈希与CredentialId匹配问题

你需要哈希的是公钥的DER编码原始二进制字节,而非PEM格式的字符串。以下是针对你现有变量的PHP实现步骤:

正确代码示例

// 从已获取的公钥PEM中提取DER编码的原始字节
$cleanPem = preg_replace('/-----BEGIN PUBLIC KEY-----\n?|\n?-----END PUBLIC KEY-----/', '', $keyPem);
$publicKeyDer = base64_decode($cleanPem);

// 计算公钥DER字节的SHA256原始哈希(注意第三个参数为true,返回二进制数据)
$computedCredentialId = hash('sha256', $publicKeyDer, true);

// 安全对比计算出的哈希与从authData提取的$credentialId
if (hash_equals($computedCredentialId, $credentialId)) {
    // 验证通过
} else {
    // 验证失败
}

关键注意事项

  • 必须使用二进制哈希:hash函数第三个参数设为true,返回原始二进制哈希值,因为$credentialId是从authData中提取的原始字节,而非十六进制字符串。如果之前尝试时没加这个参数,得到的十六进制字符串自然无法匹配。
  • 清理PEM格式要彻底:确保移除PEM头、尾的精确标记,包括可能存在的换行符,否则base64解码会出错,导致哈希结果错误。
  • Apple文档对应关系:App Attest文档第5步要求的"credCert中公钥的SHA256哈希",本质就是公钥DER编码的SHA256原始哈希,它与$credentialId(密钥标识符)是同一值。

内容的提问来源于stack exchange,提问作者gbalduzzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:12:48