【问题标题】:Alternative Java Methods for Encoding String to Base64将字符串编码为 Base64 的替代 Java 方法
【发布时间】:2017-12-21 23:35:50
【问题描述】:

在 C# 中,我可以将一个字符串传递给Convert.FromBase64String(String string),它返回一个byte[]。以下面的代码为例:

string key = "lRixPxNRmNOTxB2npoa5zCZR2I/GkuCndWtcRS/w4CI=";
byte[] KeyBytes = Convert.FromBase64String(key);
Console.WriteLine(KeyBytes.Length); //output 32

如果我在 java 中使用 java.util.Base64 库尝试同样的事情, 它看起来像这样:

String key = "lRixPxNRmNOTxB2npoa5zCZR2I/GkuCndWtcRS/w4CI=";
byte[] base64KeyBytes = Base64.getEncoder().encode(key.getBytes(UTF_8));
System.out.println(base64KeyBytes.length); //output 60

Java encode 方法需要 byte[] 类型作为参数,我认为这就是我的问题的根源。

无论如何,Java 中是否有一种方法可以产生与 C# 中相同的输出?

【问题讨论】:

  • 确定要在此处解码
  • 可能 .net 版本使用不同于 utf-8 的平台默认编码,例如 iso-8859。

标签: java c# base64 encode


【解决方案1】:

.NET 中的 Convert.FromBase64String 方法用于将 base64 编码的字符串解码回纯文本。这是正确的,因为您的 key 字符串是 base64 编码的。

在您的Java 代码摘录中,相反,您正尝试使用encode 方法编码您已经使用base64 编码的字符串...而您应该改为解码它。为此,请使用以下代码:

String key = "lRixPxNRmNOTxB2npoa5zCZR2I/GkuCndWtcRS/w4CI=";
byte[] base64KeyBytes = Base64.getDecoder().decode(key);
System.out.println(base64KeyBytes.length); // 32

您也可以使用android.util.base64,如下所示:

String key = "lRixPxNRmNOTxB2npoa5zCZR2I/GkuCndWtcRS/w4CI=";
byte[] base64KeyBytes = Base64.decode(key, Base64.DEFAULT);
System.out.println(base64KeyBytes.length); // 32

【讨论】:

    【解决方案2】:

    应该是decode 而不是encode

      String key = "lRixPxNRmNOTxB2npoa5zCZR2I/GkuCndWtcRS/w4CI=";
      byte[] base64KeyBytes  = Base64.getDecoder().decode(key);
      System.out.println(base64KeyBytes .length); //output 32
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      相关资源
      最近更新 更多