如何base-64编码十六进制字符串

ali*_*der 1 java base64 hex

我试图base-64编码一个十六进制字符串(下面复制),但我从Java8调用编码到base64得到的值与我在不同的在线转换器上得到的值不匹配.我想弄清楚我错过了哪些步骤(或者我正在考虑失误):

//hexString is 07050600030102
Base64.getEncoder().encodeToString(hexString.getBytes(StandardCharsets.UTF_8));

//output I am getting from Java8 ic copied below:
MDcwNTA2MDAwMzAxMDI=

//online converters:
BwUGAAMBAg==
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

这不符合您的预期:

hexString.getBytes(StandardCharsets.UTF_8)
Run Code Online (Sandbox Code Playgroud)

这只是将十六进制字符串编码为UTF-8 - 您要解析十六进制字符串,以便每对十六进制数字最终作为单个字节.base64结果不同的事实只是因为你base64编码的字节不同.

要将十六进制字符串解析为字节,可以使用Guava(以及其他库)

byte[] bytes = BaseEncoding.base16().decode(hexString);
String base64 = BaseEncoding.base64().encode(bytes);
Run Code Online (Sandbox Code Playgroud)