출처는 http://man.phpschool.com/이고
복잡한 소스를 약간 정리했습니다.
이정도면 실전에 응용해도 될정도로 충분히 안전하고 편리하다고 생각됩니다.
영문, 한글, 특수문자 테스트 결과도 좋았습니다.
<?
function bytexor($a,$b)
{
$c="";
for($i=0;$i<16;$i++)$c.=$a{$i}^$b{$i};
return $c;
}
function decrypt_md5($msg,$key)
{
$string="";
$buffer="";
$key2="";
while($msg)
{
$key2=pack("H*",md5($key.$key2.$buffer));
$buffer=bytexor(substr($msg,0,16),$key2);
$string.=$buffer;
$msg=substr($msg,16);
}
return($string);
}
function encrypt_md5($msg,$key)
{
$string="";
$buffer="";
$key2="";
while($msg)
{
$key2=pack("H*",md5($key.$key2.$buffer));
$buffer=substr($msg,0,16);
$string.=bytexor($buffer,$key2);
$msg=substr($msg,16);
}
return($string);
}
// 사용 예
$message = "다양한 원본 메시지 東西南北 ABC abc 123 ※ ↔ ";
$key = "아..이정도면 매우 복잡한 키--;";
$encrypted = encrypt_md5($message, $key);
$decrypted = decrypt_md5($encrypted, $key);
echo "Encrypted = $encrypted";
echo " <HR>";
echo "Decrypted = $decrypted";
?>