개발자 Q&A

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

2025.05.13 09:47

Sodium_crypto_pwhash 함수 이해 도움 부탁드립니다.

목록
  • UI컴포넌트장인 18일 전 2025.05.13 09:47
  • 29
    1
제가 현재 sodium_crypto_pwhash 함수를 사용하여 비밀번호를 해시화하는 중인데, 이 함수의 옵션 parameter인 OPCODES, SALTBYTES, BCRYPT_PWHASH_SIZE, BCRYPT_PWHASH_SCALING_FACTOR, BCRYPT_PWHASH_MAX_MEMORY_BUDGET 등에 대한 정확한 이해가 부족합니다.

이러한 옵션의 역할과 사용 방법에 대한 설명을 부탁드립니다.

또한, 이 함수를 사용하여 비밀번호를 해시화한 후, 해당 해시 값을 검증하는 방법에 대한 정보도 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  18일 전



    Sodium_crypto_pwhash 함수는 비밀번호를 안전하게 해시화하는 데 사용되는 함수입니다. 이 함수의 옵션 파라미터는 다음과 같은 역할을 합니다.

    - OPCODES: 이 옵션은 사용할 알고리즘을 지정합니다. 현재 지원되는 알고리즘은 Argon2id, Argon2i, Argon2d, PBKDF2HMAC-SHA256, PBKDF2HMAC-SHA512, PBKDF2HMAC-RIPEMD160, PBKDF2HMAC-KECCAK256, PBKDF2HMAC-KECCAK512, PBKDF2HMAC-SHA3-256, PBKDF2HMAC-SHA3-512, PBKDF2HMAC-SHA3-224, PBKDF2HMAC-SHA3-384입니다. 기본값은 Argon2id입니다.

    - SALTBYTES: 이 옵션은 salt의 길이를 지정합니다. 기본값은 16입니다.

    - BCRYPT_PWHASH_SIZE: 이 옵션은 해시된 비밀번호의 길이를 지정합니다. 기본값은 32입니다.

    - BCRYPT_PWHASH_SCALING_FACTOR: 이 옵션은 해시화 프로세스의 스케일링 팩터를 지정합니다. 기본값은 2입니다.

    - BCRYPT_PWHASH_MAX_MEMORY_BUDGET: 이 옵션은 해시화 프로세스의 최대 메모리 예산을 지정합니다. 기본값은 1024MB입니다.

    비밀번호를 해시화한 후, 해당 해시 값을 검증하는 방법은 다음과 같습니다.

    1. 비밀번호를 해시화할 때 사용한 옵션 파라미터를 기억합니다.
    2. 사용자로부터 비밀번호를 입력받습니다.
    3. 입력받은 비밀번호를 해시화한 후, 해시된 비밀번호와 이전에 저장한 해시된 비밀번호를 비교합니다.
    4. 두 해시된 비밀번호가 일치하면, 비밀번호가 정확한 것입니다.

    다음은 예제 코드입니다.

    #hostingforum.kr
    c
    
    #include 
    
    
    
    int main() {
    
        unsigned char password[32];
    
        unsigned char salt[16];
    
        unsigned char hash[32];
    
        unsigned long long memcost;
    
    
    
        // 사용자로부터 비밀번호를 입력받습니다.
    
        printf("비밀번호를 입력하세요: ");
    
        fgets(password, 32, stdin);
    
    
    
        // 비밀번호를 해시화합니다.
    
        if (sodium_crypto_pwhash(hash, 32, password, strlen(password), salt, 16, 2, 1024, &memcost) != 0) {
    
            printf("해시화 실패n");
    
            return 1;
    
        }
    
    
    
        // 해시된 비밀번호를 저장합니다.
    
        // ...
    
    
    
        // 사용자로부터 비밀번호를 입력받습니다.
    
        printf("비밀번호를 입력하세요: ");
    
        fgets(password, 32, stdin);
    
    
    
        // 입력받은 비밀번호를 해시화합니다.
    
        if (sodium_crypto_pwhash(hash, 32, password, strlen(password), salt, 16, 2, 1024, &memcost) != 0) {
    
            printf("해시화 실패n");
    
            return 1;
    
        }
    
    
    
        // 해시된 비밀번호를 검증합니다.
    
        if (memcmp(hash, 해시된 비밀번호, 32) == 0) {
    
            printf("비밀번호가 정확합니다.n");
    
        } else {
    
            printf("비밀번호가 틀립니다.n");
    
        }
    
    
    
        return 0;
    
    }
    
    


    이 예제 코드는 비밀번호를 해시화하고, 해시된 비밀번호를 검증하는 방법을 보여줍니다.

    2025-05-13 09:48

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

검색

게시물 검색