zoukankan      html  css  js  c++  java
  • 中央音乐平台的MD5算法问题

    最近与华为联调彩铃中央音乐平台接口的WEB SERVICE遇到了郁闷的问题,在这个接口中需要使用MD5算来相互验证用户身份,华为使用JAVA开发我方使用Visual Studio .NET 2005开发,遗憾的是华为的MD5算法与RFC 1321的Test siute不相符,更为可笑的是他们在规范中还给出了他们的MD5算法:
     1import java.security.MessageDigest;
     2
     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

    请注意第14-18行不知大侠出于什么想法加上。

    RFC 1321中,给出了Test suite用来检验你的实现是否正确:

    MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
    MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
    MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
    MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b

     

    下面是中央音乐平台规范中的MD5加密算法例子加密的结果

    MD5(“”)=59ADB24EF3CDBE0297F05B395827453F

    MD5 ("a") = B6FF9A06B7E20BCB2858C5B8FF744AEA
    MD5 ("abc") = AF5DA9F45AF7A300E3ADED972F8FF687
    MD5 ("abcdefghijklmnopqrstuvwxyz") = 1C8003CE2CE5966DA43E92DCD7E35656
    把上述代码中第14-18行的for循环去掉即符合RFC 1321,真不知道他们是怎么测试的,象这样代码也好意思放到规范中,也不想想其他厂商怎么和你们联调,看来脑袋里水还不少呢!
  • 相关阅读:
    内存泄漏检测工具VLD在VS2010中的使用举例
    boost::threadpool 调用类成员变量并传入参数 的方法
    boost之ThreadPool
    DllMain 用法
    分布式锁的几种实现方式
    利用cbmakegen导出Code::blocks的Makefile
    搜集C++实现的线程池
    微软开源rDSN分布式系统开发框架
    腾讯互娱开源分布式开发框架Pebble
    SpringBoot指定额外需要扫描的包
  • 原文地址:https://www.cnblogs.com/liughost/p/358477.html
Copyright © 2011-2022 走看看