PHP는 길이가 다른 문자열을 똑같은 길이로 변환할 수 있도록 해쉬 함수(해시 함수)를 제공합니다. 그 중 가장 넓리 쓰이는 함수 중 아래 SHA()와 SHA1()이 있습니다.

SHA('변환할 내용');
또는 SHA1('변환할 내용')




[ 1 ] PHP를 사용한 간단한 쿼리문 예제보기


; 클라이언트로 입력받은 값이 변수 $user_ps에 저장되어 있다면 이를 사용해 데이터베이스에 저장할 때 SHA() 또는 SH1A() 함수를 사용하여 아래처럼 저장이 가능합니다.


<?php
$db_ps = SHA($salt_value.$user_ps);
?>


위에서 언급한 변수 $db_ps는 데이터베이스에 저장될 변환값입니다. $user_ps를 자세히 보시면 클라이언트, 즉 방문자가 입력한 패스워드와 salt라는 소금치기 방법을 사용해 변수 하나를 합쳐서 변환하였습니다... 이 소금치기는 자주 사용되는 방법입니다.

# 소금치기란?
; 간략하게 얘기해서 특정문자만 해쉬함수를 사용해 변환할 경우 누구든지 변환값을 미리 알수가 있습니다.... 하지만 이 특정문자와 간단한 단어(소금으로 사용 될...)만 혼합해도 전혀 새로운 문자가 생성되기 때문에 이를 복호화한다는 것은 엄청난 연산이 필요하게 될 것이며 예측하기가 매우 어려워집니다.


[ 2 ] HASH함수의 특징 및 활용방법


해쉬 함수(hash function)를 사용하면 특정 문자를 불규칙한 형태의 고정길이 형태로 변환할 수 있습니다. 이런 불규칙 문자변환때문에 해쉬되기 이전의 문자가 무엇인지 알아내기가 굉장히 어렵습니다. 그래서 패스워드를 저장할때 많이 사용됩니다.

하지만 해쉬 함수를 통한 암호화가 안전한 것만은 아닙니다. RSA 알고리즘처럼 이중키 암호 방식을 사용하지 않기 때문입니다. 그래서 암호를 해야하는 경우 CA 인증업체를 통한 https 프로토콜등의 방법을 사용해 암호화하는 방법이 좋습니다.

해쉬함수를 제공하는 php 역시 해쉬함수만을 사용해 암호화 하지 않는 것을 권고하고 있습니다.