md5('value') 와 같이 쓰이는 경우와 md5('value',true) 와 같이 쓰이는 경우가 있다. 두 경우의 차이점을 어렴풋이 알고 있지만, 기회가 되어 정리하고 넘어가고자 한다.
php 의 md5() 함수는 아래와 같은 형식을 가진다.
md5( string $str , [ bool $raw_output = FALSE ] )
str 은 해시 값을 생성할 문자열이며, 뒤의 옵션 부분을 true로 설정하면, 32 자리 문자열 ( md5 다이제스트 ) 이 반환되는 대신에 길이가 16인 원시(raw) 바이너리 형식으로 반환된다.
<?php
$md5 = md5(123);
echo $md5;
echo "\n";
$md5_raw = md5(123,true);
echo $md5_raw;
echo "\n";
$php_magic_hash = md5("QNKCDZO"); // md5(240610708)
echo $php_magic_hash;
echo "\n";
$md5_raw = md5("129581926211651571912466741651878684928",true);
echo $md5_raw;
?>
위 실행 코드 중 $php_magic_hash 에 대한 결과는 PHP 의 magic hash란 특수동작에 관한 예제이다. ( a == b와 같은 약한 비교 일 경우에 발생하는 문제점이다. 해결 방법은 c === b와 같은 강한 비교를 사용하면 된다. )
$md5_raw 는 아래 블로그와 연관이 있다. (raw) or 8과 같이 값이 출력되어 sql injection에 대한 위험에 처할 수 있다.
참조
https://cvk.posthaven.com/sql-injection-with-raw-md5-hashes