识别文件是否使用 BER 编码

Identify if a file uses BER encoding

我是 ASN.1 编码的新手,我想知道 BER 编码文件是否有 header 或任何将其标识为 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 编码是否以这种方式工作,或者在您知道它是否是 BER 之前是否必须使用一些东西对其进行解码。

没有特殊的 header 可以识别 BER 编码。但是,格式中有很多冗余,因此如果您充分分析它们,您可以将许多字节序列识别为无效 BER。

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

正如@Henry 所说,没有特殊的 header。

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

转到 http://asn1-playground.oss.com/,确保选中 BER,select Binary fileData 下拉列表(右上角框)中并上传您的二进制文件文件。

如果您的文件包含有效的 BER 编码数据,它将显示在 CONSOLE OUTPUT

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