Java Base64 Encode 函数和PHP Base64 Encode 函数一样吗?

标签 java php base64

我正在尝试使用客户端提供的值在 PHP 中测试 Soap Security header 。

他们提供的值(value)如...

wTAmCL9tmg6KNpeAQOYubw==

...并说这是一个 Base64 编码值。

但是,当我通过 PHP 的 Base64 解码功能运行它时......

base64_decode("wTAmCL9tmg6KNpeAQOYubw==");

它翻译成:�0&�m6@�.o

如果我用 Java 解码它...

import java.util.Base64;
import java.util.Arrays;

/**
 * hello
 */
public class hello {

    public static void main(String[] args) {
        Base64.Decoder decoder = Base64.getDecoder();
        Base64.Encoder encoder = Base64.getEncoder();
        String stringEncoded = "wTAmCL9tmg6KNpeAQOYubw==";

        System.out.println("This is a decoded value: " + decoder.decode(stringEncoded));
        System.out.println("This is a re-coded value: " + encoder.encode(decoder.decode(stringEncoded)));

    }
}

我得到这样的解码字符串:[B@7229724f

但是如果我尝试重新编码那个字符串,我会得到这个:[B@4c873330

我在这里错过了什么?

最佳答案

您缺少的是解码 Base 64 值的结果不打算打印为字符串。事实上,您在 Java println 的输出中看到了这一点。 [B@7229724f 不是解码字节的字符串表示形式。这是 Java byte [] 打印的方式。 [B表示字节数组,其余字符为对象标识的十六进制数字。 (它会为每个字节数组实例打印不同的内容,与数组的内容无关。)

如果你想要字节的字符串表示,你需要从字节构造一个字符串:

    System.out.println("This is a decoded value: " + new String(decoder.decode(stringEncoded), StandardCharsets.UTF_8));
    System.out.println("This is a re-coded value: " + new String(encoder.encode(decoder.decode(stringEncoded), StandardCharsets.UTF_8));

关于Java Base64 Encode 函数和PHP Base64 Encode 函数一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57862759/

相关文章:

java - 如何正确设计多个子类的组合?

java - 根据流中的匹配条件返回元素

php - 密码中的字符串和盐与 crypt() 相同是否安全?

php - API 需要 SSH key ,这通常是如何完成的?

php - 替换Mysql中的两行

python - 在 Python 中解码一列 Base64 字符串

android - Phonegap 插件 :How to convert Base64 String to a PNG image in Android

javascript - 以 Base64 发送较大图像时 Nodemailer 崩溃

java - 如何在java中调用R的auto.Arima函数并存储预测结果?

java - 为什么spark不选择证书?