将MD5-base64从JAVA转换为PHP

问题描述 投票:0回答:1

我在将生成md5-base64的Java代码转换为php时遇到问题。

我会尝试5个多小时,但没有成功。

这是Java代码:

public static void main(String[] args) {
        // TODO code application logic here

        try {
            String string = "customString";
            String format = "20190101000000";
            StringBuilder sb = new StringBuilder();
            sb.append(format);
            sb.append(string);
            String sb2 = sb.toString();

            byte[] bytes = sb2.getBytes();
            byte[] bArr = new byte[16];
            MessageDigest instance2 = MessageDigest.getInstance("MD5");
            instance2.update(bytes, 0, bytes.length);
            instance2.digest(bArr, 0, 16);

            PrintStream printStream6 = System.out;
            String a2 = Base64.getEncoder().encodeToString(bArr);
            if (a2.length() >= 20) {
                a2 = a2.substring(0, 19).trim();
            }
            StringBuilder sb8 = new StringBuilder();
            sb8.append("MD5 16: ");
            sb8.append(a2);
            printStream6.println(sb8.toString());

        } catch (Exception e) {
            System.out.println(e);
        }

    }

这是我的PHP

<?php

$string = 'customString';
$format = '20190101000000';

$res = $format . $string;
$md5 = md5($res, true);
echo $md5;
echo '------------------';

$base = base64_encode($md5);
echo $base;
echo '------------------';

$result = substr($base, 0, 19);
echo $result;
echo '------------------';

Java结果是1B2M2Y8AsgTpgAmY7Ph,而php是iSKxA + 7Y1mMnHhwf0yb

java php base64 md5
1个回答
0
投票

检查字符集编码。在Java中,字符串通常是UTF-8编码的。但是,当您在sb2.getBytes()中转换为byte []时;它使用的是平台默认字符集(例如ISO-8859-1)。

您必须在java中提供字符集才能具有确定的行为:

sb2.getBytes(java.nio.charset.Charset.forName("UTF-8");

或反之,如果目标不只是简单地使两者重现相同的输出,而是您必须实现与现有Java解决方案兼容的PHP解决方案,请将PHP UTF-8字符串转换为md5之前的正确字符集( ...)。因此,请使用iconv方法。

© www.soinside.com 2019 - 2024. All rights reserved.