MD5加密支付宝支付与微信支付
在做支付宝支付与微信支付时看到两家公司给的dom其中关于MD5加密的 
支付宝的dom: 
DigestUtils.md5Hex(test).toUpperCase(); 
微信的dom: 
  private static String MD5(String sourceStr) throws UnsupportedEncodingException { 
        String result = “”; 
        try { 
            MessageDigest md = MessageDigest.getInstance(“MD5”); 
            md.update(sourceStr.getBytes()); 
            byte b[] = md.digest(); 
            int i; 
            StringBuffer buf = new StringBuffer(“”); 
            for (int offset = 0; offset < b.length; offset++) { 
                i = b[offset]; 
                if (i < 0) 
                    i += 256; 
                if (i < 16) 
                    buf.append(“0”); 
                buf.append(Integer.toHexString(i)); 
            } 
            result = buf.toString(); 
        } catch (NoSuchAlgorithmException e) { 
         //      log.info(e); 
        } 
        return result; 
    } 
    测试了下, 
    第一张图(http://img.blog.csdn.net/20150828222552981) 
    这里得到的结果是相同的,但是在支付时在微信使用DigestUtils.md5Hex(test).toUpperCase();函数得到的是错误的签名。不知道怎么回事 
    其中微信的dom是不能使用中文的,但是测试多次得到的结果都是三者相同,郁闷 
    要使用中文只需要将md.update(sourceStr.getBytes());改为md.update(sourceStr.getBytes(“UTF-8”)); 
   即可。 
   贴出代码: 
    private static String MD5TOE(String sourceStr) throws UnsupportedEncodingException { 
        String result = “”; 
        try { 
            MessageDigest md = MessageDigest.getInstance(“MD5”); 
            md.update(sourceStr.getBytes(“UTF-8”)); 
            byte b[] = md.digest(); 
            int i; 
            StringBuffer buf = new StringBuffer(“”); 
            for (int offset = 0; offset < b.length; offset++) { 
                i = b[offset]; 
                if (i < 0) 
                    i += 256; 
                if (i < 16) 
                    buf.append(“0”); 
                buf.append(Integer.toHexString(i)); 
            } 
            result = buf.toString(); 
            //log.info(“MD5(” + sourceStr + “,16) = ” + buf.toString().substring(8, 24)); 
        } catch (NoSuchAlgorithmException e) { 
      //      log.info(e); 
        } 
        return result; 
    } 
    其中这个log.info是得到16位的MD5. 
    有知道在支付时在微信使用DigestUtils.md5Hex(test).toUpperCase();函数得到的是错误的签名。可以说下原因。谢谢
版权声明:本文为博主原创文章,未经博主允许不得转载。
