Мета: на самом деле речь идет не о криптографии, а об использовании инструмента для обработки данных, лишь частично связанного с криптографией; но поскольку никто не проголосовал за закрытие (это я вижу), я продолжу. Это можно удалить при необходимости.
Не совсем так, но есть опция команды для создания произвольных данных 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