中央音乐平台的MD5算法问题
最近与华为联调彩铃中央音乐平台接口的WEB SERVICE遇到了郁闷的问题,在这个接口中需要使用MD5算来相互验证用户身份,华为使用JAVA开发我方使用Visual Studio .NET 2005开发,遗憾的是华为的MD5算法与RFC 1321的Test siute不相符,更为可笑的是他们在规范中还给出了他们的MD5算法:
请注意第14-18行不知大侠出于什么想法加上。
9A 06B7E20BCB2858C 5B8FF744AEA
MD5 ("abc") = AF5DA9F 45AF7A 300E3ADED972F 8FF687
MD5 ("abcdefghijklmnopqrstuvwxyz") =1C 8003CE2CE5966DA43E92DCD7E35656
把上述代码中第14-18行的for循环去掉即符合RFC 1321,真不知道他们是怎么测试的,象这样代码也好意思放到规范中,也不想想其他厂商怎么和你们联调,看来脑袋里水还不少呢!
1
import java.security.MessageDigest;
2![](/Images/OutliningIndicators/None.gif)
3
/**
4
* @param str:需要进行md5hash的字符串
5
* @return :经过md5hash后的字符串
6
**/
7
public static String getMD5String(String str)
8
{
9
try
10
{
11
byte[] res=str.getBytes();
12
MessageDigest md = MessageDigest.getInstance("MD5".toUpperCase());
13
byte[] result=md.digest(res);
14
for(int i=0;i<result.length;i++)
15
{
16
md.update(result[i]);
17
}
18
byte[] hash=md.digest();
19
StringBuffer d=new StringBuffer("");
20
for(int i=0;i<hash.length;i++)
21
{
22
int v=hash[i] & 0xFF;
23
if(v<16) d.append("0");
24
d.append(Integer.toString(v,16).toUpperCase()+"");
25
}
26
return d.toString();
27
}
28
catch(Exception e)
29
{
30
return null;
31
}
32
}
33![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
32
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
33
![](/Images/OutliningIndicators/None.gif)
请注意第14-18行不知大侠出于什么想法加上。
在RFC 1321中,给出了Test suite用来检验你的实现是否正确:
MD5 ("") = d41d8cd
MD5 ("a") = 0cc175b
MD5 ("abc") = 900150983cd24fb0d
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
下面是中央音乐平台规范中的MD5加密算法例子加密的结果
MD5(“”)=59ADB24EF3CDBE
MD5 ("abc") = AF5DA
MD5 ("abcdefghijklmnopqrstuvwxyz") =
把上述代码中第14-18行的for循环去掉即符合RFC 1321,真不知道他们是怎么测试的,象这样代码也好意思放到规范中,也不想想其他厂商怎么和你们联调,看来脑袋里水还不少呢!