nodejs md5 base64 与java端的不一致?

发布于 2022-09-12 03:58:05 字数 1391 浏览 15 评论 0

   //客户校验码    使用顺丰分配的客户校验码
    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==

问题出在哪?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无所的.畏惧 2022-09-19 03:58:05

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文