Обнаружение типа файла открытого ключа RSA

Я получил RSA pubkey.dat (почти очевидно, что это такое), который имеет следующую структуру содержимого:

  • ASN1 Целое число около 1024 бит (модуль)
  • Целое число ASN1 (экспонента)
  • Большой двоичный объект размером 256 байт (подпись)

Никаких тегов типа "----begin---" или что-то в этом роде. чистые шестнадцатеричные значения в нем.

Есть ли способ определить его формат, например, DER/PEM/etc, поэтому я могу открыть его с помощью криптобиблиотек Python или crypto++ на C++?

(Или если оно соответствует общедоступному стандартному имени структуры, которое я могу проверить)

Похоже, это не PEM, так как M2crypt не может его загрузить.

Заранее спасибо.


person Ragnagard    schedule 09.07.2009    source источник


Ответы (1)


PEM-кодирование имеет обязательный формат:

-----BEGIN typeName-----
base64 of DER value
-----END typeName-----

где для открытых ключей typeName="PUBLIC KEY" (AFAIR), так что это очень легко проверить с помощью регулярного выражения, такого как следующее:

/-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----/

Если это не PEM, обычно это обычный DER.

DER-представление ПОСЛЕДОВАТЕЛЬНОСТИ ASN.1 всегда начинается с 0x30, поэтому обычно, когда мне нужно декодировать поток DER-или-PEM, который я точно знаю, это ПОСЛЕДОВАТЕЛЬНОСТЬ ASN.1 (в любом случае, наиболее сложные значения являются ПОСЛЕДОВАТЕЛЬНОСТЬЮ), я проверяю первый байт: если это 0x30, я декодирую как DER, иначе я декодирую как PEM.

Вы можете быстро проверить свои данные ASN.1, используя мой собственный синтаксический анализатор ASN.1 с открытым исходным кодом (это все клиент- стороны Javascript, поэтому я не увижу ваши данные).

person lapo    schedule 01.09.2009