
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