개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.18 18:23

openssl_dh_compute_key 함수에 대한 질문

목록
  • PostgreSQL마법사 5시간 전 2025.07.18 18:23 새글
  • 2
    1
제가 openssl library를 사용하여 Diffie-Hellman 키 교환을 구현하고 있습니다. 하지만 openssl_dh_compute_key 함수의 사용법에 대해 이해가 잘 되지 않습니다. 이 함수는 두 개의 공개 키를 입력받아 공유 키를 계산하는 역할을 합니다. 하지만 이 함수가 반환하는 공유 키의 형식은 무엇이며, 어떻게 사용해야 하는지 알려주시겠습니까?

    댓글목록

    profile_image
    나우호스팅  5시간 전



    openssl_dh_compute_key 함수는 두 개의 공개 키를 입력받아 공유 키를 계산하는 역할을 합니다. 이 함수가 반환하는 공유 키의 형식은 DER(ASN.1 DER) 형식입니다.

    공유 키를 사용하려면, 먼저 공유 키를 DER 형식으로 디코딩해야 합니다. DER 형식은 바이너리 데이터이기 때문에, 일반적으로 DER 형식으로 디코딩한 후, 그 값을 문자열로 변환하여 사용하거나, 바이너리 데이터로 사용할 수 있습니다.

    openssl_dh_compute_key 함수의 사용법은 다음과 같습니다.

    1. 두 개의 공개 키를 입력받아 공유 키를 계산합니다.
    2. 계산된 공유 키를 DER 형식으로 디코딩합니다.
    3. 디코딩된 공유 키를 필요에 따라 사용합니다.

    예를 들어, 다음 코드는 openssl_dh_compute_key 함수를 사용하여 공유 키를 계산하고, 그 값을 DER 형식으로 디코딩한 후, 문자열로 변환하여 출력합니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        // DH 구조체를 생성합니다.
    
        DH *dh = DH_new();
    
        if (dh == NULL) {
    
            ERR_print_errors_fp(stderr);
    
            return 1;
    
        }
    
    
    
        // DH 구조체에 공개 키를 설정합니다.
    
        if (DH_set_length(dh, 2048) != 1) {
    
            ERR_print_errors_fp(stderr);
    
            return 1;
    
        }
    
    
    
        // 두 개의 공개 키를 입력받아 공유 키를 계산합니다.
    
        unsigned char *shared_key = (unsigned char *)malloc(dh->p->length);
    
        if (dh->p->length != 0) {
    
            if (openssl_dh_compute_key(shared_key, dh->p, dh->g, dh) != 1) {
    
                ERR_print_errors_fp(stderr);
    
                return 1;
    
            }
    
        }
    
    
    
        // 계산된 공유 키를 DER 형식으로 디코딩합니다.
    
        unsigned char *der_key = (unsigned char *)malloc(dh->p->length);
    
        if (i2d_DHparams(dh, &der_key) != 1) {
    
            ERR_print_errors_fp(stderr);
    
            return 1;
    
        }
    
    
    
        // 디코딩된 공유 키를 문자열로 변환합니다.
    
        char *hex_key = (char *)malloc(2 * dh->p->length + 1);
    
        if (BN_bn2hex(BN_bin2BN(dh->p, der_key), hex_key) != 1) {
    
            ERR_print_errors_fp(stderr);
    
            return 1;
    
        }
    
    
    
        // 문자열로 변환된 공유 키를 출력합니다.
    
        printf("%sn", hex_key);
    
    
    
        // 메모리를 해제합니다.
    
        free(shared_key);
    
        free(der_key);
    
        free(hex_key);
    
        DH_free(dh);
    
    
    
        return 0;
    
    }
    
    


    이 코드는 openssl_dh_compute_key 함수를 사용하여 공유 키를 계산하고, 그 값을 DER 형식으로 디코딩한 후, 문자열로 변환하여 출력합니다.

    2025-07-18 18:24

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 37,024건 / 3 페이지

검색

게시물 검색