用于将字符串编码为Base64的备用Java方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于将字符串编码为Base64的备用Java方法相关的知识,希望对你有一定的参考价值。

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

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

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

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#中获得的相同输出吗?

答案

Convert.FromBase64String中的方法.NET用于将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
另一答案

它应该是decode而不是encode

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

以上是关于用于将字符串编码为Base64的备用Java方法的主要内容,如果未能解决你的问题,请参考以下文章

01加密方式-Base64编码

base64模块的使用

如何在 ios 中将 Base64 编码的 NSString 转换为字节数组(Java)?

将 InputStream 转换为 base64 字符串

在 Java 中如何进行 BASE64 编码和解码

java中图片地址base64编码的相互转换