【发布时间】:2017-07-11 16:37:45
【问题描述】:
我正在处理 Apple Pay 支付令牌解密。 根据此指令Payment Token Format Reference 在步骤 2 中。我需要使用支付令牌标头中的 publicKeyHash 字段来确定哪个 Apple 使用了商家证书。
pulbicKeyHash 是商户证书的 X.509 编码公钥字节的 SHA-256 哈希,Base64 编码为字符串。
我有一张商家证书。所以我假设如果我将我的证书公钥的 sha-256 散列和 Base64 编码,我将得到与我在支付令牌的 publicKeyHash 字段中收到的相同的值。
但我不知道我应该散列证书的哪个特定部分。 Apple 提供的初始商户证书为 .cer 格式。 我已将公钥从中提取为 .pem 格式。比我尝试的都取散列 - >公钥的base64encode(-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----之间的字符串)和 获取base64解码的.pem的哈希,我认为应该是.der和base 64对其进行编码。
两者都未能匹配从 Apple Pay 收到的价值。它的长度也不同,我的 base64 编码哈希的长度为 88 个字符,publicKeyHash 字段的长度为 44 个字符。
当我尝试基于 64 位解码 publicKeyHash 时,我得到了像“D�đ���$�f���@c���$����WP��这样的不可读字符 但根据 Apple 文档,应该有不能包含此类符号的 sha-256 哈希。
谁能解释我应该执行哪些具体步骤才能完成此商家证书检查?
【问题讨论】:
-
嗯,Base64 SHA-256 哈希不应该是 44 个字符吗? stackoverflow.com/questions/2240973/…
-
据我所知,sha-256 有 64 个字符。但我真的不知道这个数字在 base 64 编码后是如何变化的。
-
二进制 SHA-256 哈希的长度为 256 位。在十六进制表示中,每个字符使用 4 位,因此结果是 64 个字符。 Base64 每 4 个字符使用 3 个字节加上一个填充字符,即 44 个字符。如果您要生成证书的二进制哈希并以 B64 对其进行编码,则结果必须包含 44 个字符。你应该检查你的哈希和 B64 算法,因为有问题
-
我已经设法在结果中获得了适量的字符。我还成功地从证书中提取了 .pem 格式的公钥。但它的哈希或 base 64 解码的公钥的哈希与 Apple 令牌的 publicKeyHash 字段不匹配......有人知道我应该以什么格式对哪些特定数据进行哈希以获得正确的结果?
标签: encryption base64 sha256 applepay