biggates的心得

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

今天上午一直在翻OMA的SyncML 1.1 协议,卡在用户验证的地方,按照协议上的例子怎么算也算不出来预期的结果。

根据协议正文,MD5验证的算法很简单,用伪代码来表示就是这样:

result = base64( md5( base64( md5( username + ":" + password)) + ":" + nonce) );

用php写出来就是:

function computehash($username, $password, $nonce){
    
return base64_encode(pack('H*', md5(base64_encode(pack('H*', md5("$username:$password"))) . ":$nonce")));
}

但是用协议里指定的参数:

username="Bruce1" , password="OhBehave" , nonce="Nonce"

无论如何也算不出协议里给的值"Zz6EivR3yeaaENcRN6lpAQ==", 而是 "+MEIKFrF8Qdou2B1H2YmXw=="

一气之下用 .NET 写了一个,结果也是相同的。

Code

经过多方搜索,终于在 这里 发现了原因:协议写错了。正确的参数应该是:

username="Bruce2" , password="OhBehave" , nonce="Nonce"

我Faint…

posted on 2009-06-10 12:09  biggates  阅读(572)  评论(0编辑  收藏  举报