我正在实现一个在线支付系统: Paybox。
我有一个自动响应(在服务器之间)和一个响应(附加到我的客户时,他返回我的网站)。
除了签名是一个SHA1之外,一切都很好。在自动响应方面,我有一个有效的标志:
ahkjqBWxsi2rMXWpQr9LaQFelTIGJ93pKfGt2E6lT1sIKABsNanexC0gZvt5Z8ShgQXUsGBS10QVPzUxmYDhWpuDKIiHDZ5i9mLm2UGz8LOJeGkIlikuXOCC3ny但是,对于客户(此测试中的我),我有:
ah8R%2F2mvvpc8Jo016XyO7WZbqmQktb%2BShME6A0X3hwCNWkkGXb1YI9wIS7RSCK1IJKotbYni8BxBNoHTKcLxdA9nOQPcQSD%2FUM3%2BdiptrnTuLZ1jP9bIDCvDtSav7WG509gw5PbEztpl5lOZlnIFuCMzC3Ps%2B2Rt%2FO6PSZfHgvA%3D我不明白:
1)为什么它们不同。
2)为什么第二个有不能从SHA1输出的'%‘字符
我想过一种不同的编码,但到目前为止还没有,有什么想法吗?
谢谢
发布于 2016-04-20 22:49:07
%2F和%2B是URL编码字符;分别是/和+。
您可能会看到它们,因为它们可以出现在Base64编码的字符串中,这就是您所拥有的(尽管在第一个示例中没有它们),因为您不能将原始的SHA1散列表示为字符串。
在许多情况下,您不能使用HTTP发送包含原始形式字符的字符串,因为它们具有特殊含义,请参阅Passing base64 encoded strings in URL。
假设编码/解码和SHA1代码正常工作,那么这两个散列不同的原因是因为输入数据不同。
https://stackoverflow.com/questions/36747192
复制相似问题