🔑 해시
bcrypt
password_hash / password_verify
bcrypt password hashing and verification.
사용 방법
개요
bcrypt로 해시를 생성하거나 해시 문자열을 검증할 수 있는 도구입니다.
💡
변환 처리는 서버 측에서 수행되지만, 데이터는 일절 저장되지 않습니다.
해시의 대표적인 사용 예 중 하나로 "비밀번호 저장"을 들 수 있습니다.
기본 전제로, 해시 문자열에서 원본 데이터로 복원할 수 없습니다(단방향성).
비밀번호를 해시화한 해시 문자열에서 원래 비밀번호 문자열을 도출할 수 없습니다.
따라서 비밀번호를 그대로 저장하지 않고, 일반적으로 해시 문자열을 저장합니다.
💡
해시 강도에 따라 무차별 대입 공격으로 해독될 가능성도 있지만, 자세한 설명은 생략합니다.
동일한 비밀번호 문자열에서는 동일한 해시 문자열을 생성할 수 있습니다.
즉, 해시화 전 문자열과 해시 문자열이 있으면 검증할 수 있습니다.
(예를 들어, 해시 문자열이 해당 비밀번호로 생성된 것인지 여부)
해시 생성 (password_hash)
bcrypt 해시 생성은 다음과 같은 코드로 수행합니다.$hash = password_hash('string_to_hash', PASSWORD_BCRYPT, [
'cost' => 'cost',
]);
bcrypt로 생성된 해시 문자열은 salt(랜덤 문자열)가 포함되므로, 매번 다른 문자열이 생성됩니다.
$2y$10$Z0kGQ04hCto9dnMu.GyzWOWNQmoKyeF5PXH.zsrf/I.yNJRcbdN86
password_hash 함수의 cost 기본값은 10입니다.
password_hash 함수 자체는 4~31 범위를 지정할 수 있지만, 서버 부하를 고려하여 4~15까지로 제한하고 있습니다.
(값이 클수록 처리 시간이 매우 오래 걸리기 때문입니다.)
해시 검증 (password_verify)
bcrypt로 생성된 해시 문자열에는 규칙이 있어 salt와 스트레칭 횟수가 포함되므로, 해시화 전 문자열에서 해시 문자열이 생성되었는지 검증할 수 있습니다.
bcrypt 해시 문자열 검증은 다음과 같은 코드로 수행합니다.$result = password_verify('original_string', 'hash_string_to_verify');
💡
이 도구로 bcrypt 해시 생성 및 검증을 간편하게 수행할 수 있습니다.