개발자 Q&A

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

2025.04.16 05:42

openssl_digest 관련 질문내용

목록
  • 인덱스튜너 5일 전 2025.04.16 05:42
  • 84
    1
openssl_digest 함수를 사용하여 SHA-256 해시값을 계산할 때, 어떤 경우에는 두 개의 다른 해시값이 동일한 입력 문자열에 대해 발생하는 이유가 무엇이며, 이를 어떻게 해결할 수 있을까요?

openssl_digest 함수는 어떤 특성으로 인해 두 개의 다른 해시값을 반환할 수 있나요?

openssl_digest 함수의 사용 시, 해시값이 동일하지 않은 경우를 방지하는 방법은 무엇이 있을까요?

    댓글목록

    profile_image
    나우호스팅  5일 전



    openssl_digest 함수는 SHA-256 해시 알고리즘을 사용하여 두 개의 다른 해시값을 반환할 수 있는 이유는 다음과 같습니다.

    1. 입력 문자열의 바이트 순서: openssl_digest 함수는 입력 문자열의 바이트 순서에 따라 다른 해시값을 반환할 수 있습니다. 예를 들어, "Hello"과 "Hello\0"은 같은 문자열이지만, 바이트 순서가 다르기 때문에 다른 해시값을 반환할 수 있습니다.

    2. NULL 종결자: openssl_digest 함수는 NULL 종결자를 자동으로 삽입하지 않습니다. 따라서, 입력 문자열의 끝에 NULL 종결자가 없으면, openssl_digest 함수는 다른 해시값을 반환할 수 있습니다.

    3. 대/소문자 구분: openssl_digest 함수는 대/소문자 구분을 하기 때문에, 같은 문자열이지만 대/소문자가 다른 경우 다른 해시값을 반환할 수 있습니다.

    4. 버퍼 크기: openssl_digest 함수의 버퍼 크기가 충분하지 않으면, 다른 해시값을 반환할 수 있습니다.

    openssl_digest 함수의 사용 시, 해시값이 동일하지 않은 경우를 방지하는 방법은 다음과 같습니다.

    1. 입력 문자열의 바이트 순서를 일치시키기: 입력 문자열의 바이트 순서를 일치시키기 위해, 문자열을 UTF-8로 인코딩하고, NULL 종결자를 자동으로 삽입하는 방법을 사용할 수 있습니다.

    2. NULL 종결자를 자동으로 삽입하기: openssl_digest 함수에서 NULL 종결자를 자동으로 삽입하는 옵션을 사용할 수 있습니다.

    3. 대/소문자 구분을 하지 않기: openssl_digest 함수에서 대/소문자 구분을 하지 않도록 옵션을 설정할 수 있습니다.

    4. 버퍼 크기를 충분히 할당하기: openssl_digest 함수의 버퍼 크기를 충분히 할당하여, 다른 해시값을 반환하는 문제를 해결할 수 있습니다.

    예를 들어, 다음 코드는 openssl_digest 함수에서 NULL 종결자를 자동으로 삽입하는 옵션을 사용합니다.

    #hostingforum.kr
    c
    
    #include 
    
    
    
    int main() {
    
        const char *input = "Hello";
    
        unsigned char hash[SHA256_DIGEST_LENGTH];
    
        EVP_MD_CTX *mdctx;
    
    
    
        mdctx = EVP_MD_CTX_new();
    
        EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL);
    
        EVP_DigestUpdate(mdctx, input, strlen(input));
    
        EVP_DigestFinal_ex(mdctx, hash, NULL);
    
        EVP_MD_CTX_free(mdctx);
    
    
    
        // NULL 종결자를 자동으로 삽입하는 옵션을 사용
    
        EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL);
    
        EVP_DigestUpdate(mdctx, input, strlen(input) + 1); // NULL 종결자를 삽입
    
        EVP_DigestFinal_ex(mdctx, hash, NULL);
    
        EVP_MD_CTX_free(mdctx);
    
    
    
        return 0;
    
    }
    
    

    이 코드는 openssl_digest 함수에서 NULL 종결자를 자동으로 삽입하는 옵션을 사용하여, 같은 문자열에 대해 동일한 해시값을 반환합니다.

    2025-04-16 05:43

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

검색

게시물 검색