首页 新闻 会员 周边 捐助

用 MD5 值做签名,服务器如何验证结果???

0
悬赏园豆:10 [已解决问题] 解决于 2016-08-02 20:27

在 EAN 的API接口文档中,关于签名的说明如下:

http://developer.ean.com/docs/translations/zh-cn/getting-started/api-authentication

 

使用数字签名时,sig 值的计算方法是,生成包含 API 密钥、API 用户共享秘密以及 UNIX 时间戳的 MD5 哈希值

系统接受早于或晚于服务器时间戳长达五分钟的时间戳,以顺应合理的时间漂移。

签名 = MD5($"{API 密钥}{API 用户共享秘钥}{UNIX 时间戳}")

 

很想了解他们是如何通这个签名来判断是不是前后5分钟之内的操作的。。

有没有做过相关的?请指教。

 

-------------------------------

补充说明:

也就是说,我把时间调早或晚5分钟以上,这个请求是无效的。我就好奇这个,他们是怎么做到的。

 

我手动改过时间,5分钟以外的,确实是无效请求。

MD5
xling的主页 xling | 初学一级 | 园豆:6
提问于:2016-08-02 16:41
< >
分享
最佳答案
0

你签名只是用来保证你信息没有被篡改过,但你原始信息还是要带过去的。

收获园豆:10
Daniel Cai | 专家六级 |园豆:10424 | 2016-08-02 16:53

看题

xling | 园豆:6 (初学一级) | 2016-08-02 16:59

也就是说,我把时间调早或晚5分钟以,这个请求是无效的。我就好奇这个,他们是怎么做到的。

xling | 园豆:6 (初学一级) | 2016-08-02 17:01

@xling: 你那文档例子不是说明了么,原文是带在sig里的。

Daniel Cai | 园豆:10424 (专家六级) | 2016-08-02 17:03

@xling: 仔细看了下,时间戳是没带过去,如果非要实现也不是不行,也就是600次比较。不过这种做法很2b.

Daniel Cai | 园豆:10424 (专家六级) | 2016-08-02 17:09

@xling: 整个hash中除了时间戳服务端是知道的,那么就暴力的从5分钟前的时间戳到5分钟后的时间戳一个个的计算hash一次做比较。

Daniel Cai | 园豆:10424 (专家六级) | 2016-08-02 17:14

@Daniel Cai: 如果没有其它办法,600次也可能。。。这些JAVA大牛B。。。大牛B。。。

xling | 园豆:6 (初学一级) | 2016-08-02 17:15

@Daniel Cai: 岂止是2B,简直就是傻逼。。。

顾晓北 | 园豆:10893 (专家六级) | 2016-08-02 17:25

@顾晓北: 也不一定是没用,那个md5的hash太简单了,如果再把时间戳放明文里面,暴力破解出前面两个定值(实际上可以看为是一个)就简单很多。当然如果真的是这个原因也的确很2b的。

Daniel Cai | 园豆:10424 (专家六级) | 2016-08-02 17:40
其他回答(1)
0

你的时间戳不传过去?

顾晓北 | 园豆:10893 (专家六级) | 2016-08-02 16:48

请求里只有 API KEY 个,并没有 时间戳。

如果有时间戳,傻子也知道怎么比较。

支持(0) 反对(0) xling | 园豆:6 (初学一级) | 2016-08-02 16:58

@xling: 有点扯吧?时间戳不传过去,你连签名对不对都不知道,有毛用???

支持(0) 反对(0) 顾晓北 | 园豆:10893 (专家六级) | 2016-08-02 17:04

@顾晓北: 搞的好像我骗你一样,原文中的这个示例地址,你看:

http://api.ean.com/ean-services/rs/hotel/v3/avail? cid=[yourCID] &apiKey=[yourAPIKey] &sig=[youSigValue] &minorRev=[current minorRev #] &customerUserAgent=[xxx] &customerIpAddress=[xxx] &locale=en_US &currencyCode=USD &hotelId=201252

支持(0) 反对(0) xling | 园豆:6 (初学一级) | 2016-08-02 17:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册