在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#中获得的相同输出吗?
答案 0 :(得分:1)
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
答案 1 :(得分:0)
应该是decode
而不是encode
String key = "lRixPxNRmNOTxB2npoa5zCZR2I/GkuCndWtcRS/w4CI=";
byte[] base64KeyBytes = Base64.getDecoder().decode(key);
System.out.println(base64KeyBytes .length); //output 32