Meta: đây không thực sự là về mật mã, nhưng việc sử dụng một công cụ để xử lý dữ liệu chỉ liên quan một phần đến mật mã; nhưng vì không có ai bỏ phiếu để đóng (mà tôi có thể thấy) nên tôi sẽ tiếp tục. Điều này có thể bị xóa nếu cần thiết.
Không chính xác, nhưng có một tùy chọn lệnh để xây dựng dữ liệu ASN.1 tùy ý, có thể được điều chỉnh cho việc này với một chút công việc, nếu bạn có giá trị riêng mong muốn ở dạng hex 'đơn giản': trên Unix (nếu không đã hex) bạn có thể chuyển đổi với xxd -p -c32
hoặc od -An -tx1 | tr -d ' \n'
hoặc tương tự, trên Windows, bạn chỉ có một mình. Đưa ra một tệp có nội dung sau ngoại trừ thay thế giá trị riêng tư mong muốn của bạn:
asn1=SEQ:pkcs8c
[pkcs8c]
phiên bản = INT: 0
algid=SEQ:algid
dữ liệu=OCTWRAP,SEQ:sec1
[algid]
alg=OID:id-ecPublicKey
parm=OID:prime256v1
[giây1]
phiên bản = INT: 1
khóa riêng=ĐỊNH DẠNG:HEX,OCT:0123456789ABCDEFFEDCBA98765432100123456789ABCDEFFEDCBA9876543210
sau đó
openssl asn1parse -genconf tên tệp -noout [-out derfile]
sẽ tạo định dạng rõ ràng PKCS8 trong DER và nối thêm | openssl pkey -inform der
sẽ chuyển đổi nó thành PEM. Hoặc trên Unix, bạn có thể chuyển đổi sang PEM 'thủ công' với ... | { printf '%s\n' '-----BEGIN KHÓA RIÊNG TƯ-----'; cơ sở mởssl64; printf '%s\n' '-----KẾT THÚC RIÊNG TƯ KẾT THÚC-----'; }
Ngoài ra, và nguy hiểm hơn, mã hóa DER của cấu trúc được mô tả ở trên hoàn toàn không đổi ngoại trừ giá trị riêng xuất hiện sau cùng, vì vậy bạn có thể chỉ cần nối phần không đổi với giá trị riêng để nhận DER rõ ràng PKC8, sau đó chuyển đổi thành PEM như trên:
# trên Unix, với 32 byte ở dạng nhị phân trong tệp 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'; tệp thô mèo;
# tạo DER và đặt nó vào { } hoặc ( ) và dẫn kết quả đến
# pkey -inform der hoặc giải pháp thay thế thủ công ở trên chuyển thành PEM