gpt4 book ai didi

Java : Hex encoded bytes get decoded with base64

转载 作者:行者123 更新时间:2023-12-02 01:52:00 29 4
gpt4 key购买 nike

HEX(Base16) 编码字节使用 Base64 进行解码而不抛出异常?如何区分是否只用base16编码器编码?

org.apache.commons.codec.binary.Base64.decodeBase64(bytesencodedwithHex);

当上述方法的字节是十六进制编码数据时,该方法不会抛出任何异常或帮助识别它是十六进制编码的。甚至 org.apache.commons.codec.binary.Base64.Base64.isBase64(bytesencodedwithHex) 返回 true。

下面的示例字符串“Hello”用十六进制编码,当我用 Base64 解码时,它给出了一些废话。在这种情况下,我如何让客户知道他们使用了错误的解码器? :

System.out.println(new 
String(org.bouncycastle.util.encoders.Hex.encode("Hello".getBytes())));

System.out.println(new String(org.bouncycastle.util.encoders.Base64.decode("48656c6c6f".getBytes())));

最佳答案

每个十六进制字符串都是合法的 Base64 字符串。

十六进制编码为您提供一个表示原始字符串字节的字符串,由 0-9 和 A-F 组成。 Base64 编码为您提供一个对原始字符串进行编码的字符串,并且仅由可打印字符组成(当然,包括 0-9、A-F)。

因此每个由 0-9,A-F 组成的字符串可以表示一个十六进制字符串,但也可以表示一个 Base64 字符串(恰好只有 0-9,A-F)。

您将需要一种不同的方式来告诉用户所使用的编码。一个示例是将编码类型的结构与字符串一起发送,或者发送原始字符串的长度(因此,如果在解码后得到错误的长度 - 这不是正确的编码模式)。

关于Java : Hex encoded bytes get decoded with base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52829922/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com