Tôi đang sử dụng thư viện c của OpenSSL để tạo ra cặp khóa elip Diffie-Hellman (ECDH), theo mẫu mã đầu tiên here. Nó đã che đậy việc trao đổi thực tế của khóa công khai với dòng này:Làm cách nào để truy cập vào khóa công khai, khóa riêng và các tham số nguyên trong cấu trúc EVP_PKEY của OpenSSL?
peerkey = get_peerkey(pkey);
Các pkey
biến và giá trị trả về đều là kiểu EVP *
. pkey
chứa khóa công cộng, khóa cá nhân và thông số được tạo trước đó và giá trị trả lại chỉ chứa khóa công khai của đồng nghiệp. Vì vậy, điều này làm tăng ba câu hỏi:
- Làm thế nào sẽ
get_peerkey()
thực sự chỉ trích các khóa công khai từpkey
để gửi đến các đồng đẳng? - Mã sẽ trích xuất khóa cá nhân và thông số từ
pKey
để lưu trữ chúng để sử dụng sau này sau khi trao đổi khóa như thế nào? - Làm cách nào để
get_peerkey()
tạo cấu trúcEVP_PKEY
mới từ khóa công khai thô của đồng nghiệp?
Tôi đã nhìn thấy các chức năng OpenSSL EVP_PKEY_print_public()
, EVP_PKEY_print_private()
, và EVP_PKEY_print_params()
nhưng đây là để tạo ra con người có thể đọc được. Và tôi đã không tìm thấy bất kỳ tương đương nào để chuyển đổi khóa công khai có thể đọc được thành một cấu trúc EVP_PKEY
.
Cảm ơn bạn đã cung cấp câu trả lời tiếp theo! – samoz
Deserialize chìa khóa công cộng có thể đã làm việc 4 năm và 5 tháng trước, nhưng nó có vẻ khá phức tạp ngày hôm nay !!! : p EVP_PKEY_get1_EC_KEY được cho là tạo EC_POINT từ octet nhưng nó nhận được EC_POINT * từ đầu vào! Tôi đã cố gắng để làm cho nó bằng EC_POINT_new nhưng sau đó không thể tạo khóa bí mật với việc tạo ra EVP_KEY! – madz