Meta: nu este vorba cu adevărat despre criptografie, ci despre utilizarea unui instrument de procesare a datelor legat doar parțial de cripto; dar din moment ce nimeni nu a votat să închidă (ceea ce pot vedea) voi merge înainte. Acesta poate fi șters dacă este necesar.
Nu tocmai, dar există o opțiune de comandă pentru a construi date ASN.1 arbitrare, care pot fi adaptate pentru asta cu puțină muncă, dacă aveți valoarea privată dorită în hex „plat”: pe Unix (dacă nu este deja hex) cu care puteți converti xxd -p -c32
sau od -An -tx1 | tr -d ' \n'
sau similar, pe Windows sunteți pe cont propriu. Dat un fișier cu următorul conținut, cu excepția înlocuirii valorii private dorite:
asn1=SEQ:pkcs8c
[pkcs8c]
ver=INT:0
algid=SEQ:algid
date=OCTWRAP,SEQ:sec1
[algid]
alg=OID:id-ecPublicKey
parm=OID:prime256v1
[sec1]
ver=INT:1
privkey=FORMAT:HEX,OCT:0123456789ABCDEFFEDCBA98765432100123456789ABCDEFFEDCBA9876543210
atunci
openssl asn1parse -genconf nume de fișier -noout [-out derfile]
va crea formatul PKCS8-clear în DER și anexând | openssl pkey -inform der
îl va converti în PEM. Sau pe Unix puteți converti în PEM „manual” cu ... | { printf '%s\n' '-----BEGIN PRIVATE KEY-----'; openssl base64; printf '%s\n' '-----END CHEIE PRIVATA-----'; }
Alternativ și mai hacker, codificarea DER a structurii descrise mai sus este constantă, cu excepția valorii private care apare ultima, așa că puteți pur și simplu să concatenați partea constantă cu valoarea privată pentru a obține DER PKC8-clear, apoi convertiți în PEM. ca mai sus:
# pe Unix, având în vedere cei 32 de octeți în binar din fișierul 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'; cat rawfile;
# creează DER și pune-l în { } sau ( ) și trimite rezultatul la
# pkey -inform der sau alternativa manuală de mai sus se convertește în PEM