nodejs md5 base64 与java端的不一致?

   //客户校验码    使用顺丰分配的客户校验码
    String checkWord = "fjcg5PGKaNpPSHFAZ4QsCOkV71R3zVci";
    //时间戳 取报文中的timestamp(调用接口时间戳)
    String timestamp = "12312334453453";//业务报文  去报文中的msgData(业务数据报文)
    String msgData = "{\"language\":\"zh-CN\",\"orderId\":\"QIAO-20200618-004\"}";
    //将业务报文+时间戳+校验码组合成需加密的字符串(注意顺序)
    String toVerifyText = msgData+timestamp+checkWord;
    //因业务报文中可能包含加号、空格等特殊字符,需要urlEnCode处理
    toVerifyText = java.net.URLEncoder.encode(toVerifyText,"UTF-8"); 

    //进行Md5加密        
    MessageDigest  md5 = MessageDigest.getInstance("MD5");
    md5.update(toVerifyText.getBytes("UTF-8"));
    byte[] md = md5.digest();
    //通过BASE64生成数字签名
    String msgDigest = new String(new BASE64Encoder().encode(md));

这是第三方java 代码,
msgDigest = EzIVrsgF5xBOTwN4YUCGhg==

        let md5 = crypto.createHash('md5');
        let msgData1 = {"language":"zh-CN","orderId":"QIAO-20200618-004"};
        let timestamp1 = 12312334453453;
        let checkword1='fjcg5PGKaNpPSHFAZ4QsCOkV71R3zVci';
        let toVerifyText1 = JSON.stringify(msgData1) + timestamp1.toString() + checkword1;

        let toVerify1 = encodeURIComponent(toVerifyText1,'utf-8');

       let msgDigest = md5.update(toVerify1,'utf8').digest('base64');

        console.log(msgDigest);

msgDigest=IIKJtuLVzoFTu4kHI8M8vA==

问题出在哪?

阅读 4.1k
1 个回答

加几个输出或者断点就搞定了.
先输出 你拼接出来的 字符串,就是 msgData+timestamp+checkWord 看看两边一样不,在看看 urlencode 两边一样不,在看 md5 出来的值一样不,在看 base64出来的值一样不

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题