php md5于java得到的结果不同

问题描述:
因接口对接时,对方只提供了java的接口,调用接口时需要md5加密签名,一直签名验证失败,最后发现是双方Md5的结果不同
求助有没有将字符串转为java md5的方法?国内和国外搜索出来的找到java转为PHP的?

str="aId=1&action=queryWeizhang&carNo=粤A12345&carType=02&mId=1&key"

java的结果:385400B2F19F85CA5314AC521C7990A1
php的结果 :5DA911F422619237A2085332861DDC15

已解决:
$param = array_map('urlencode', $param);

    $param['aId'] = $this->aId;
    $param['sign'] = $this->sign($param);
    ksort($param);
    $base64 = base64_encode(json_encode($param));
阅读 3.8k
2 个回答
新手上路,请多包涵

MD5跟语言无关,测试了一下,JAVA也是5DA911F422619237A2085332861DDC15

import java.io.*;
import java.security.MessageDigest;

class test  
{
    private static String MD5(String s) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] bytes = md.digest(s.getBytes("utf-8"));
            return toHex(bytes);
        }
        catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

private static String toHex(byte[] bytes) {

    final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
    StringBuilder ret = new StringBuilder(bytes.length * 2);
    for (int i=0; i<bytes.length; i++) {
        ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
        ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
    }
    return ret.toString();
}

    public static void main (String[] args) throws java.lang.Exception
    {
        System.out.println(test.MD5("aId=1&action=queryWeizhang&carNo=粤A12345&carType=02&mId=1&key"));
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题