我正在实施在线支付系统:Paybox。
我有一个自动回复(服务器之间)和回复(当他回到我的网站时附加到我的客户。
一切都很好,除了签名是SHA1。 在自动回复方面,我有一个有效的标志:
ahkjqBWxsi2rMXWpQr9LaQFelTIGJ93pKfGt2E6lT1sIKABsNanexC0gZvt5Z8ShgQXUsGBS10QVPzUxmYDhWpuDKIiHDZ5i9mLm2UGz8LOJeGkIlikuXOCC3ny
但是,对于客户(我参加此测试),我有:
ah8R%2F2mvvpc8Jo016XyO7WZbqmQktb%2BShME6A0X3hwCNWkkGXb1YI9wIS7RSCK1IJKotbYni8BxBNoHTKcLxdA9nOQPcQSD%2FUM3%2BdiptrnTuLZ1jP9bIDCvDtSav7WG509gw5PbEztpl5lOZlnIFuCMzC3Ps%2B2Rt%2FO6PSZfHgvA%3D
我不明白:
1)为什么他们不同。
2)为什么第二个字符不能从SHA1
输出'%'字符我想到了不同的编码但到目前为止没有任何想法?
由于
答案 0 :(得分:0)
%2F
和%2B
是URL编码字符; <{1}}和/
。
您可能会看到它们,因为它们可以出现在Base64编码的字符串中,这就是您所看到的内容(尽管在第一个示例中它们不存在),因为您无法将原始SHA1哈希表示为字符串。
在许多情况下,您无法使用HTTP以原始形式发送包含这些字符的字符串,因为它们具有特殊含义,请参阅Passing base64 encoded strings in URL。
假设编码/解码和SHA1代码正常运行,那么两个哈希值不同的原因是因为输入数据不同。