Рейтинг:0

OpenSSL: как преобразовать закрытый ключ ec (32-байтовый необработанный ключ) в закрытый ключ типа pem?

флаг cn

У меня есть 32-байтовая строка октетов закрытого ключа ec.

И я хочу преобразовать это в закрытый ключ типа pem.

Я использую кривую secp256r1.

Как я могу это сделать?

Есть ли какая-нибудь команда или метод для этого?

Maarten Bodewes avatar
флаг in
Я не думаю, что вы можете сделать это с помощью одной команды из командной строки, вам придется запрограммировать ее.
Рейтинг:2
флаг cn

Мета: на самом деле речь идет не о криптографии, а об использовании инструмента для обработки данных, лишь частично связанного с криптографией; но поскольку никто не проголосовал за закрытие (это я вижу), я продолжу. Это можно удалить при необходимости.

Не совсем так, но есть опция команды для создания произвольных данных ASN.1, которые можно адаптировать для этого с небольшой работой, если у вас есть желаемое частное значение в «простом» шестнадцатеричном виде: в Unix (если это не уже шестнадцатеричный) вы можете конвертировать с ххд -р -с32 или же од -An -tx1 | тр -д '\n' или аналогичный, в Windows вы сами по себе. Дан файл со следующим содержимым, за исключением подстановки желаемого частного значения:

asn1 = SEQ: pkcs8c
[pkcs8c]
версия=INT:0
алгид = SEQ: алгид
данные = OCTWRAP, SEQ: sec1
[алгид]
alg=OID:id-ecPublicKey
парм=OID:prime256v1
[сек1]
версия=INT:1
privkey=ФОРМАТ:HEX,OCT:0123456789ABCDEFFEDCBA98765432100123456789ABCDEFFEDCBA9876543210

тогда openssl asn1parse -genconf имя файла -noout [-out derfile] создаст формат PKCS8-clear в DER и добавит | openssl pkey -информировать дер преобразует его в PEM. Или в Unix вы можете конвертировать в PEM «вручную» с помощью ... | { printf '%s\n' '-----НАЧАТЬ ЗАКРЫТЫЙ КЛЮЧ-----'; база 64 OpenSSL; printf '%s\n' '-----END PRIVATE KEY-----'; }

Альтернативно и более хакерски, DER-кодирование структуры, описанной выше, является константой, за исключением частного значения, которое появляется последним, поэтому вы можете просто конкатенировать постоянную часть с частным значением, чтобы получить DER с очисткой PKC8, а затем преобразовать в PEM как указано выше:

# в Unix, учитывая 32 байта в двоичном файле в файле rawfile:
printf '\x30\x41\x02\x01\x00\x30\x13\x06\x07\x2a\x86\x48\xce=\x02\x01\x06\x08\x2a\x86\x48\xce=\x03 \x01\x07\x04\x27\x30\x25\x02\x01\x01\x04\x20'; исходный файл кота;
# создает DER, помещает его в { } или ( ) и передает результат в
# pkey -inform der или ручная альтернатива выше преобразует в PEM

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.