Encoding 确定文件是否使用BER编码

Encoding 确定文件是否使用BER编码,encoding,asn.1,Encoding,Asn.1,我是ASN.1编码的新手,我想知道BER编码的文件是否有一个头或任何东西将其标识为BER编码的文件。我的意思是,如果有人递给我一个文件,我能说它是BER(或CER或DER)编码的吗 然后我可以有这样一个函数: if FILE is BER-encoded return "BER" else if FILE is DER-encoded return "DER" else return "It's something else" 但我不确定误码率编码是否是这样工作的,或者在你知道它是

我是ASN.1编码的新手,我想知道BER编码的文件是否有一个头或任何东西将其标识为BER编码的文件。我的意思是,如果有人递给我一个文件,我能说它是BER(或CER或DER)编码的吗

然后我可以有这样一个函数:

if FILE is BER-encoded
  return "BER"
else if FILE is DER-encoded
  return "DER"
else
  return "It's something else"

但我不确定误码率编码是否是这样工作的,或者在你知道它是否是误码率之前,你是否必须用某种东西来解码它。

没有特殊的头来识别误码率编码。然而,该格式中存在大量冗余,因此,如果您对许多字节序列进行全面分析,您可以将它们识别为无效的BER


每个DER编码也是有效的BER编码,但不一定相反。您可以读取一个字节序列作为BER,然后用DER重新编码抽象值,并检查是否得到相同的结果。如果是,它最初是DER。

没有识别BER编码的特殊头。然而,该格式中存在大量冗余,因此,如果您对许多字节序列进行全面分析,您可以将它们识别为无效的BER


每个DER编码也是有效的BER编码,但不一定相反。您可以读取一个字节序列作为BER,然后用DER重新编码抽象值,并检查是否得到相同的结果。如果是的话,它最初是DER。

正如@Henry所说,没有特殊的标题

但是,您可以通过尝试解码来知道文件是否包含BER编码的数据

转到,确保选中了
BER
,在
Data
下拉列表(右上框)中选择
Binary file
,然后上载二进制文件

如果您的文件包含有效的BER编码数据,它将显示在
控制台输出中


然而,您可能会对结果感到失望:即使它是有效的,您也可能看不到任何有用的信息(您需要模式,即规范来理解数据)。

正如@Henry所说,没有特殊的标题

但是,您可以通过尝试解码来知道文件是否包含BER编码的数据

转到,确保选中了
BER
,在
Data
下拉列表(右上框)中选择
Binary file
,然后上载二进制文件

如果您的文件包含有效的BER编码数据,它将显示在
控制台输出中


然而,您可能会对结果感到失望:即使它是有效的,您也可能看不到任何有用的信息(您需要模式,也称为规范,来理解数据)。

要编码DER,您需要模式。如果您首先拥有该模式,那么就能够验证数据是否有效。请注意,DER只是删除了BER允许的编码选项,因此给定的值只能以一种方式进行编码。如果您首先拥有该模式,那么就能够验证数据是否有效。请注意,DER只是删除了BER允许的编码选项,因此给定的值只能以一种方式编码。请注意,尝试在没有模式的情况下解码只会告诉您a)数据肯定不是BER还是b)数据可能是BER。一般来说,你不能说数据肯定是误码率,因为没有模式,一般解码只能走这么远。@Kevin让我质疑“a”语句:如果它是有效的误码率编码,但是要解码它,你需要一个你没有的模式——这种情况看起来与一个非误码数据是无法区分的。@Illya Etingof我想我们在同一页上。我的意思是,在没有模式的情况下解码时,你最多只能说a)数据肯定不是误码率,或者b)数据可能是误码率。你通常无法得出结论c)数据肯定是误码率,因为有时你真的需要模式。请注意,在没有模式的情况下尝试解码只会告诉你a)数据肯定不是误码率还是b)数据可能是误码率。一般来说,你不能说数据肯定是误码率,因为没有模式,一般解码只能走这么远。@Kevin让我质疑“a”语句:如果它是有效的误码率编码,但是要解码它,你需要一个你没有的模式——这种情况看起来与一个非误码数据是无法区分的。@Illya Etingof我想我们在同一页上。我的意思是,在没有模式的情况下解码时,你最多只能说a)数据肯定不是误码率,或者b)数据可能是误码率。您通常无法得出结论c)数据肯定是BER,因为有时您确实需要模式。