내가 한 노력들

[ codeigniter 4 ] 랜덤 hash 생성하여 DB에 저장하기 본문

IT 공부/CodeIgniter

[ codeigniter 4 ] 랜덤 hash 생성하여 DB에 저장하기

JONGI-N CHOI 2022. 3. 14. 14:17

Email 검증 기능을 구현할 때, 랜덤 hash를 생성하여 DB에 저장한 뒤, hash의 token값을 email 내용의 링크에 포함을 시킵니다. 

 

그 후에, 링클르 클릭하면 token값을 hash로 변환하여 DB에 저장된 hash값과 비교하여 일치하면 검증 성공하는 방법

위와같은 기능을 구현하기 위해 랜덤의 hash값을 생성하는 방법을 알아보겠습니다.

 

random_bytes()

random_bytes(int $length): string

파라미터에 넣는 길이 만큼의 랜덤 바이트를 생서합니다. 

 

dd(random_bytes(16));

//random_bytes(...) binary string (16)

하지만, 브라우저에서는 바이트값이 표시가되지 않습니다.

 

bin2hex()

bin2hex(string $string): string

 

함수이름 그대로, 바이너리를 16진수의 데이터로 변환시켜 줍니다. 

 

dd(bin2hex(random_bytes(16)));

//bin2hex(...) string (32) "9c903a226bfdfcf6eeaebae84829552f"

 

hash_hmac()

hash_hmac(
    string $algo,
    string $data,
    string $key,
    bool $binary = false
): string

이젠, 위의 만든 랜덤 토큰을 hash로 변환하는 과정입니다. 

 

$token = bin2hex(random_bytes(16));
dd(hash_hmac('sha256', $token, '8sjtf5nYiZqqcm4ghoZkeyAkVdCJBVWn'));

//hash_hmac(...) string (64) "a7755a721ea50548039118b382f82053e8e83a2d0088f804657c3d98a4ce824c"

첫 번째 파라미터로는 해싱 알고리즘을 선택합니다. (md5, sha256 등)

 

두 번째는 해시할 데이터

 

세 번째는 암호화를 생성하는 사용될 공유 비밀키입니다.

https://randomkeygen.com/

위의 사이트에서 랜덤 공유 비밀키를 하나 복사해서 사용할 수 있습니다.