메뉴 건너뛰기

Dev tips

PHP PHP5 에서 mysql password, old_password 구현

taknim 2009.01.07 01:43 조회 수 : 12887 추천:2864

http://www.zeroboard.com/?mid=mgrc_qna&search_target=title&page=6&document_srl=14177181&sort_index=readed_count&order_type=aschttp://blog.naver.com/zsssd/150033288221mysql 4.1.x 이하 옛날 password() 함수 - old_password()

        /**
         * @brief mysql old_password 의 php 구현 함수
         * 제로보드4나 기타 mysql4.1 이전의 old_password()함수를 쓴 데이터의 사용을 위해서
         * mysql의 password.c 소스 참조해서 구현함
         **/
    function mysql_pre4_hash_password($password) {
        $nr=0x50305735;
        $nr2=0x12345671;
        $add=7;
        $charArr = preg_split("//", $password);
        foreach ($charArr as $char) {
            if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
            $charVal = ord($char);
            $nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
            $nr2 += ($nr2 << 8) ^ $nr;
            $add += $charVal;
        }
        return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
    }

/** 5.0 이상일 경우
        function mysql_pre4_hash_password($password) {
            $nr = 1345345333;
            $add = 7;
            $nr2 = 0x12345671;

            settype($password, "string");

            for ($i=0; $i<strlen($password); $i++) {
                if ($password[$i] == ' ' || $password[$i] == '\t') continue;
                $tmp = ord($password[$i]);
                $nr ^= ((($nr & 63) + $add) * $tmp) + ($nr << 8);
                $nr2 += ($nr2 << 8) ^ $nr;
                $add += $tmp;
            }
            $result1 = sprintf("%08lx", $nr & ((1 << 31) -1));
            $result2 = sprintf("%08lx", $nr2 & ((1 << 31) -1));

            if($result1 == '80000000') $nr += 0x80000000;
            if($result2 == '80000000') $nr2 += 0x80000000;

            return sprintf("%08lx%08lx", $nr, $nr2);
        }
**/


mysql 4.1.x 이상 새로운 password() 함수 - password()

function mysql_new_password( $pw ) {
    return (strlen($pw) > 0) ? strtoupper('*'.sha1(sha1($pw, true))) : ($pw === null ? null : '');
}