[PHP] #21 PHP 문자열 함수, 문자열 암호화 및 해싱 password_hash부터 md5까지

2025. 8. 10. 16:00·Programming/PHP
반응형

 

 

안녕하세요, 토스트데브입니다.
웹 개발에서 회원가입, 로그인, 민감한 데이터 저장 등을 구현할 때 꼭 알아야 할 것이 바로 문자열 암호화 및 해싱 처리입니다.
이번 글에서는 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
'Programming/PHP' 카테고리의 다른 글
  • [PHP] #20 PHP 문자열 함수, 문자열 정리 및 필터링 함수 총정리 trim부터 htmlspecialchars까지
  • [PHP] #19 PHP 문자열 함수, 문자열 수정 및 대체 str_replace부터 정규식까지 총정리
  • [PHP] #18 PHP 문자열 함수, 한글도 정확하게! 문자열 추출 및 분할 함수 정리
  • [PHP] #17 PHP 문자열 함수, 대소문자 및 첫 글자 변환 함수 간단 정리
TOASTDEV
TOASTDEV
인스턴트 코딩 #토스트데브 #토스트뎁 #코딩공부 #개발입문
  • TOASTDEV
    토스트뎁
    TOASTDEV
    • 분류 전체보기 (88) N
      • 알쓸신잡 (32) N
        • 코딩에 대하여 (13)
        • 컴퓨터에 대하여 (10) N
        • IT 국내외 소식 (9)
      • Web Front (6)
        • HTML (6)
        • CSS (0)
        • JavaScript (0)
      • Programming (21) N
        • PHP (21) N
      • Database (12)
        • SQL (12)
        • MySQL (0)
      • Server (17) N
        • Linux (17) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Youtube Toastdev
    • Naver Blog
  • 공지사항

    • [유튜브] 유튜브 영상 업로드 안내
  • 인기 글

  • 태그

    리눅스기초
    코딩공부
    웹개발
    ubuntuserver
    웹프로그래밍
    프론트엔드
    html기초
    sql
    컴퓨터기초
    웹개발기초
    ict
    ubuntu서버
    php기초
    SQL기초
    php입문
    HTML
    php문법
    데이터분석
    데이터베이스
    SQL문법
    웹개발입문
    IT상식
    코딩입문
    PHP문자열
    php코딩
    코딩기초
    서버관리
    php
    SQL강의
    서버입문
  • 최근 댓글

  • 최근 글

  • 전체
    오늘
    어제
  • 반응형
  • hELLO· Designed By정상우.v4.10.3
TOASTDEV
[PHP] #21 PHP 문자열 함수, 문자열 암호화 및 해싱 password_hash부터 md5까지
상단으로

티스토리툴바