반응형
비밀번호 암호화하기
비밀번호 체크하기
password_hash()
- 단방향 알고리즘. ( 암호화된 문자열을 다시 복호화 할 수 없습니다. )
- crypt() 와 호환됩니다.
첫번째 파라메터는 암호화할 문자열이고,
두번째 파라메터는 다음과 같습니다.
PASSWORD_DEFAULT | bcrypt 알고리즘 (기본 PHP 5.5.0부터). 결과를 60 자 이상으로 확장 할 수있는 데이터베이스 열에 저장하는 것이 좋습니다 (255자가 적합 함). |
PASSWORD_BCRYPT | CRYPT_BLOWFISH 알고리즘을 결과는 항상 60 자 문자열 (실패하면 false) |
PASSWORD_ARGON2I | Argon2i 해싱 알고리즘 PHP가 Argon2 지원으로 컴파일 된 경우에만 사용 가능 |
PASSWORD_ARGON2ID | Argon2id 해싱 알고리즘 PHP가 Argon2 지원으로 컴파일 된 경우에만 사용 가능 |
위 옵션을 선택해서 사용하면 됩니다.
(보통 PASSWORD_DEFAULT 로 사용하고 저장할 DB column 은 VARCHAR(255) 로 합니다.)
코드로 알아보기
<?
$orgStr = "hello~Bryan~";
$enc1 = password_hash($orgStr, PASSWORD_DEFAULT);
$enc2 = password_hash($orgStr, PASSWORD_DEFAULT);
$enc3 = password_hash($orgStr, PASSWORD_DEFAULT);
echo "<br/>org = $orgStr";
echo "<br/>enc1 = $enc1";
echo "<br/>enc2 = $enc2";
echo "<br/>enc3 = $enc3";
echo "<hr/>";
$tmp = "hello~";
echo "<br/>$tmp 는 ".(password_verify($tmp, $enc3) ? "일치함" : "다름");
$tmp = "hello~bryan~";
echo "<br/>$tmp 는 ".(password_verify($tmp, $enc3) ? "일치함" : "다름");
$tmp = "hello~Bryan~";
echo "<br/>$tmp 는 ".(password_verify($tmp, $enc3) ? "일치함" : "다름");
?>
위 코드의 결과는
대소문자 구분합니다.
요약
1. password_hash 로 비밀번호 암호화
2. 암호화된 문자열을 DB 에 저장
3. 비밀번호 체크는
- 화면에서 입력받은 문자열과,
- userId 로 조회 후 비밀번호 컬럼값을 password_verify 로 비교한다.
이렇게 하거나,
DB 자체에서 지원하는 암호화 알고리즘을 이용하면 됩니다.
예를들면 mysql 은
INSERT INTO testdb.tb_user (userId, userName, userPwd) values ('hello', 'bryan', password('mypass'));
SELECT * from testdb.tb_user where userPwd = password('hello')
password() 는 mysql 5.7.6 부터 deprecate 되었으므로 그 이후 버전은 sha1() 을 쓰면 됩니다.
INSERT INTO testdb.tb_user (userId, userName, userPwd) values ('newUser', 'bryanOh', sha1('mypass'));
SELECT * from testdb.tb_user where userPwd = sha1('mypass')
728x90
반응형
'php' 카테고리의 다른 글
[PHP] MySQL How To Prevent SQL Injection #SQL 공격 방지 (0) | 2021.01.09 |
---|---|
[PHP] mysqli injection #SQL 공격 (0) | 2021.01.09 |
[PHP] Login, ajax 로 구현하기 (0) | 2021.01.09 |
[PHP] login, form submit으로 구현하기 (0) | 2021.01.09 |
[php] session timeout 설정하기 #$_SESSION 방법 (0) | 2020.12.23 |
댓글