从PHP函数的Java BASE64_ENCODE()不返回相同的数据

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

我的工作需要有从本地网站创建的帐户认证的Java项目。这些帐户的密码由之前插入到数据库的PHP函数加密:

public function crypter($mdp){
    $j = 0;
    $tmp = 0;
    $key = $mdp;

    $res = "";

    for($i = 0; $i < strlen($mdp) ; $i++)
    {
        $tmp = ord($mdp[$i]) + ord($key[$i]);
        if($tmp > 255){
            $tmp = $tmp - 256;
        }

        $res[$i] = chr($tmp);

        if($j == strlen($key)-1){
            $j = 0;
        }
        else{
            $j = (($j % (strlen($key))) +1 );
        }
    }

    $res = base64_encode($res);

    return $res;
}

注:此功能尚未由我写的,所以如果你们搞清楚什么$j变量用于让我知道。我还(显然)不能更改此代码。

所以我试着翻译在Java中功能这给了这一点:

public String cryptMdp(String mdp){
    String res = "";
    String key = mdp;

    int j = 0;
    int tmp = 0;

    for (int i = 0; i < mdp.length(); i++) {
        char c = mdp.charAt(i);
        char c2 = key.charAt(i);

        tmp = (int) c + (int) c2;
        if (tmp > 255) {
            tmp = tmp - 256;
        }

        res += (char) tmp;

        if (j == key.length() - 1){
            j = 0;
        }
        else{
            j = (j % key.length()) + 1;
        }
    }
    return Base64.getMimeEncoder().encodeToString(res.getBytes());
}

不幸的是,那些不返回相同的字符串(例如:对于字符串a,PHP回报wg==和Java返回w4I=),即使按照这个this question应该是一个标准。

你们可以看到我做错了什么?

java php base64 encode
2个回答
0
投票

对于使用的Base64现有的Java功能:https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html

你可能在找这个方法:

编码(字节[] SRC)编码从指定字节数组的所有字节到使用Base64编码方案的新分配的字节数组。


0
投票

我已经能够做到我想用的URLConnection发送一个HTTP请求到我的PHP页面,像这样的内容:

public String cryptMdp(String mdp){
    try {
        URL url = new URL("http://myaddress/someproject/create_pwd.php?pwd=" + mdp);
        URLConnection conn = url.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        String inputline = "";

        while((inputline = in.readLine()) != null){
            return inputline;
        }
        in.close();
    } catch (MalformedURLException ex) {
        System.out.println("error URL");
    } catch (IOException ex) {
        System.out.println("error connection");
    }
    return null;
}

问题是,PHP使用未知字符编码它们,这意味着所有的密码都正确加密后前...

编辑:

实际上,密码不同的IDE(Netbeans的),并在建造应用(.jar)文件加密,所以qazxsw POI实际产生一样的PHP方法...

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