У меня есть модуль и показатель степени открытого ключа RSA, встроенного в двоичный файл, и я пытаюсь извлечь весь большой двоичный объект и создать пригодный для использования открытый ключ .pem.
В настоящее время я извлекаю полные 260 байтов (4 байта для экспоненты, 256 байтов для модуля) и кодирую как base64. Я делаю это с помощью следующей команды оболочки:
tail -c $((filesize - start_of_key_data)) filename | head -c $size_of_key_data | base64 > outkey
Это дает мне следующую строку:
<<<<<< modulus & exponent extracted from binary file, base64-encoded >>>>>>
tZyrQA6cZFJfVm6FyXwtZaLQYg8EecuO+ObrHTwc8JO+XrgnpNAdmlhbAEPxSNnjwhNnbYGYGL4F
vzmnZXzZU71Key42HQPh1k2Zx1UDbrH5ciODKx1ZbuEx8K24SHnL1nY/H75hwhT/ZRRVGQDvYDT+
sgzw2vmV66+dflw1Zs8BLhqjLjczdHvjeVXsDRJ9Mvvd/dhFH8UlTf4JpLGya9nsNIfNBBIf1Lll
RWwCTiEIbaOMgWcLjLV/2tk/j5Dra/oQnVf/2hVsEF/hXEx41YjeEW/warweoDVG7zaxrHEc/k/r
ZCUCZKxf8nBKdqax/gRICvkG6e5xg2GQw0W/ZwABAAE=
Теперь, когда я беру пару ключей key.pem, из которых изначально были извлечены модуль и показатель степени, и отображаю общедоступную часть, например,
openssl rsa -in key.pem -pubout -out pubkey.pem
Я получаю эту строку (я пропустил строки верхнего и нижнего колонтитула:
<<<<<<<<< valid public key data extracted from keypair >>>>>>>>>
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtZyrQA6cZFJfVm6FyXwt
ZaLQYg8EecuO+ObrHTwc8JO+XrgnpNAdmlhbAEPxSNnjwhNnbYGYGL4FvzmnZXzZ
U71Key42HQPh1k2Zx1UDbrH5ciODKx1ZbuEx8K24SHnL1nY/H75hwhT/ZRRVGQDv
YDT+sgzw2vmV66+dflw1Zs8BLhqjLjczdHvjeVXsDRJ9Mvvd/dhFH8UlTf4JpLGy
a9nsNIfNBBIf1LllRWwCTiEIbaOMgWcLjLV/2tk/j5Dra/oQnVf/2hVsEF/hXEx4
1YjeEW/warweoDVG7zaxrHEc/k/rZCUCZKxf8nBKdqax/gRICvkG6e5xg2GQw0W/
ZwIDAQAB
Вы можете видеть, что ключевые данные, которые я извлек и закодировал в кодировке base64, на самом деле присутствуют в данных действительных данных открытого ключа, извлеченных из key.pem с помощью openssl. Однако в начале 45 символов, которых нет в моих собственных извлеченных данных -
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
и последние 8 символов также различаются.
ZwIDAQAB
Может ли кто-нибудь дать совет о том, как преобразовать модуль и показатель степени в полезный открытый ключ?
(цель состоит в том, чтобы сделать это в сценарии bash, а не в python или C, как многие предлагают.)