반응형
안녕하세요, 토스트데브입니다.
웹 개발에서 회원가입, 로그인, 민감한 데이터 저장 등을 구현할 때 꼭 알아야 할 것이 바로 문자열 암호화 및 해싱 처리입니다.
이번 글에서는 PHP에서 자주 쓰이는 암호화와 해시 관련 함수들을 정리해보겠습니다.
✅ 해싱 vs 암호화의 차이 간단 정리
구분 | 해싱 (Hashing) | 암호화 (Encryption) |
목적 | 데이터 무결성 확인, 비밀번호 저장 | 데이터 보안, 복호화 가능 |
특징 | 일방향 (복호화 불가능) | 양방향 (복호화 가능) |
대표 함수 | password_hash(), md5(), sha1() | openssl_encrypt(), mcrypt_*() 등 |
✅ 1. password_hash() – 안전한 비밀번호 해싱
$password = "mySecret123";
$hashed = password_hash($password, PASSWORD_DEFAULT);
echo $hashed;
// 출력: $2y$10$N9qo8uLOickgx2ZMRZoMye...
- PHP에서 비밀번호 저장 시 권장되는 방법
- 내부적으로 bcrypt 알고리즘 사용
- salt 자동 생성 + 반복 횟수 설정 가능
🔒 비밀번호 확인: password_verify()
if (password_verify("mySecret123", $hashed)) {
echo "비밀번호 일치!";
}
⚠️ md5()와 sha1()은 이제 사용 자제!
echo md5("mypassword"); // d3486ae9136e7856bc42212385ea797094475802
echo sha1("mypassword");
- 빠르지만 보안에 취약
- 충돌(collision) 발생 위험
- 오래된 시스템에서만 호환용으로 사용
✅ 2. hash() – 다양한 해시 알고리즘 지원
echo hash("sha256", "secureData");
- sha256, sha512, ripemd160 등 다양한 알고리즘 제공
- md5나 sha1보다 강력한 보안을 위해 사용 가능
- 단, 여전히 비밀번호 저장엔 password_hash()가 더 안전
✅ 3. openssl_encrypt() – 양방향 대칭키 암호화
$data = "secret";
$key = "myKey1234567890";
$method = "AES-128-ECB";
$encrypted = openssl_encrypt($data, $method, $key);
echo $encrypted;
- 복호화 가능한 암호화 방식
- 민감한 정보를 저장할 때 사용
- 복호화: openssl_decrypt()
✅ 4. 실전 예: 로그인 구현 시 해싱 처리
// 회원가입 시
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_DEFAULT);
save_to_db($hash); // 저장
// 로그인 시
$input = $_POST['password'];
$stored = get_from_db();
if (password_verify($input, $stored)) {
echo "로그인 성공";
} else {
echo "비밀번호 불일치";
}
📌 정리 요약표
함수 | 설명 | 추천용도 |
password_hash() | 안전한 비밀번호 해시 생성 | 로그인 시스템 |
password_verify() | 해시된 비밀번호 검증 | 로그인 시 검증 |
md5(), sha1() | 빠른 해시 (보안 약함) | 호환용 또는 체크섬 |
hash() | 다양한 해시 알고리즘 지원 | 무결성 확인 |
openssl_encrypt() | 대칭키 암호화 | 복호화 가능한 민감정보 저장 |
🛡 보안 팁
- 비밀번호 저장은 반드시 password_hash() 사용
- md5()/sha1()은 가능하면 피할 것
- API 키, 민감 데이터는 openssl_encrypt()로 암호화 후 저장
- HTTPS 통신을 통해 네트워크 보안도 함께 고려해야 안전합니다
#PHP문자열 #문자열암호화 #해시함수 #password_hash #md5 #sha1 #hash #openssl_encrypt #PHP보안 #코딩입문 #웹보안 #toastdev
반응형
'Programming > PHP' 카테고리의 다른 글
[PHP] #20 PHP 문자열 함수, 문자열 정리 및 필터링 함수 총정리 trim부터 htmlspecialchars까지 (2) | 2025.08.09 |
---|---|
[PHP] #19 PHP 문자열 함수, 문자열 수정 및 대체 str_replace부터 정규식까지 총정리 (2) | 2025.08.08 |
[PHP] #18 PHP 문자열 함수, 한글도 정확하게! 문자열 추출 및 분할 함수 정리 (3) | 2025.08.07 |
[PHP] #17 PHP 문자열 함수, 대소문자 및 첫 글자 변환 함수 간단 정리 (2) | 2025.08.06 |
[PHP] #16 PHP 문자열 함수, 문자열 길이 및 정보 확인 함수 총정리! (1) | 2025.08.05 |