티스의 이야기

PHP-패스워드 해시화 본문

프로그래밍

PHP-패스워드 해시화

밍딩이 2016. 6. 29. 16:33

패스워드를 해시화하고 싶을 때


password_hash() 함수를 사용하면 간단히 패스워드를 해쉬화할 수 있습니다.



* 패스워드의 해시화란?


패스워드의 해시화란, 패스워드를 해시 함수로 처리하는 것으로, 패스워드를 보호하기 위한 방법 중 하나입니다.

해시화하지 않은 그대로의 패스워드를 데이터베이스나 파일에 저장했을 경우 데이터를 해킹당하는 것이 곧 패스워드를 해킹당하는

것이 되는데, 이것은 즉석에서 애플리케이션이 탈취당하는 것을 의미합니다. 또한 사용자가 다른 서비스에서도 같은 패스워드를 사용하면 피해가 더욱 확대됩니다. 패스워드를 해시화하여 저장하면 데이터가 해킹해도 공격자가 원래의 패스워드를 알기가 어려워집니다.


해시화된 패스워드를 구하는 스크립트(password_hash)


<?php

// PHP 5.5 이전의 환경(5.3.7 이후)에서도 password_hash() 함수를 사용할 수 있게 합니다.

require_once '../../../../lib/password_compat/password.php';

// h() 함수 레시피 218를 불러옵니다 레시피 041.

require_once '../../../../lib/h.php';


if (isset($_POST['submit'])) {

$password = $_POST['password'];


// 해시 처리의 계산 비용을 지정하고 솔트는 자동으로 생성됩니다.

$options = array('cost' => 10);

// 해시화 방식에 PASSWORD_DEFAULT를 지정하고 패스워드를 해시화합니다.

$hash = password_hash($password, PASSWORD_DEFAULT, $options);

}

?>

<!DOCTYPE html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width,initial-scale=1.0">

<title>해시화 후 패스워드를 구하는 스크립트</title>

</head>

<body>

<div>

<?php

if (isset($hash)) {

echo '해시화 전 패스워드: ' . h($password) . '<br>';

echo '해시화 후 패스워드: ' . h($hash);

}

?>

<hr>

<form action="password_hash.php" method="post">

<label for="password">해시화하고 싶은 패스워드 문자열 : </label>

<input type="text" name="password" id="password" value="">

<input type="submit" name="submit" value="해시화">

</form>

</div>

</body>

</html>




--------------------------------------------------------------------------------------------------------------------------------------------------------------------



패스워드의 대조 -> password_verify() 함수를 사용합니다.


// PHP 5.5보다 이전 환경(5.3.7 이상)에서도 password_verify() 함수를 사용할 수 있습니다.

require_once '../../../../lib/password_compat/password.php';

// 입력된 패스워드 문자열과 해시화된 패스워드를 대조합니다.

// 대조한 후 매치하면 true를, 그 외의 경우에는 false를 반환합니다.

$auth = password_verify($password, $hash);



Comments