PEM-кодировка имеет обязательный формат:
-----BEGIN typeName-----
base64 of DER value
-----END typeName-----
где для открытых ключей typeName = "PUBLIC KEY" (AFAIR), что очень легко проверить с помощью регулярного выражения, такого как:
/-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----/
Если это не PEM, это обычно просто DER.
Представление DER последовательности SENENCE ASN.1 всегда начинается с 0x30, поэтому обычно, когда мне нужно декодировать поток DER-or-PEM, который я точно знаю, что это последовательность ASN.1 (наиболее сложные значения, в любом случае, SEQUENCE) Я проверяю первый байт: если он равен 0x30, я декодирую как DER, иначе я декодирую как PEM.
Вы можете быстро проверить свои данные ASN.1, используя мой собственный анализатор ASN.1 с открытым исходным кодом (это весь Javascript на стороне клиента, поэтому я не буду видеть ваши данные).