[이윰] PHP 8.x 지원을 위한 암호화, 복호화 함수

페이지 정보

shadow2fox 2,670 3 3 2021.02.16 23:29

평점

  • 평점 : 5점 (2명 참여)

본문

📝 PHP 8.x 지원을 위한 암호화, 복호화 함수
템플릿언더바를 이용하는 구 이윰빌더 자체가 PHP 8.x를 지원하지 않는다. 그누보드는 PHP 8.x에 대응하기 위해 연이은 패치를 내놓고 있지만 아직까지도 꽤 많은 warning을 직면하게 된다.
각설하고 PHP 8.x 에서도 사용할 수 있도록 암호화, 복호화 함수를 수정해 보자.

그누보드5/eyoom/classes/eyoom.class.php를 열어 암호화 함수를 검색하여 수정한다.

수정 전

    // 암호화 함수
    public function encrypt_md5($buf, $key="password") {
        $key1 = pack("H*",md5($key));
        while($buf !== false) {
            $m = substr($buf, 0, 16);
            $buf = substr($buf, 16);

            $c = "";
            for($i=0;$i<16;$i++) $c .= $m{$i}^$key1{$i};
            $ret_buf .= $c;
            $key1 = pack("H*",md5($key.$key1.$m));
        }

        $len = strlen($ret_buf);
        for($i=0; $i<$len; $i++) $hex_data .= sprintf("%02x", ord(substr($ret_buf, $i, 1)));
        return($hex_data);
    }

    // 복호화 함수
    public function decrypt_md5($hex_buf, $key="password") {
        $len = strlen($hex_buf);
        for ($i=0; $i<$len; $i+=2) $buf .= chr(hexdec(substr($hex_buf, $i, 2)));

        $key1 = pack("H*", md5($key));
        while($buf !== false) {
           $m = substr($buf, 0, 16);
           $buf = substr($buf, 16);

           $c = "";
           for($i=0;$i<16;$i++) $c .= $m{$i}^$key1{$i};

           $ret_buf .= $m = $c;
           $key1 = pack("H*",md5($key.$key1.$m));
        }
        return($ret_buf);
    }
수정 후

    // 암호화 함수
    public function encrypt_md5($buf, $key="password") {
        $key1 = pack("H*",md5($key));
        //PHP Warning:  Undefined variable $ret_buf, $hex_data, PHP 8.x 무한 루프 방지
        $ret_buf = '';
        $hex_data = '';
        //while($buf !== false) {
        //PHP 8.x 무한 루프 방지
        while(isset($buf) && $buf) {
            $m = substr($buf, 0, 16);
            $buf = substr($buf, 16);

            $c = "";
            //PHP Warning:  Uninitialized string offset 16 이하의 숫자, 루프 리미트 16번 중에 남은 횟수가 공으로 돌아서 워닝
            $limit=strlen($m);
            //PHP Fatal error:  Array and string offset access syntax with curly braces
            for($i=0;$i<$limit;$i++) $c .= $m[$i]^$key1[$i];
            $ret_buf .= $c;
            $key1 = pack("H*",md5($key.$key1.$m));
        }

        $len = strlen($ret_buf);
        for($i=0; $i<$len; $i++) $hex_data .= sprintf("%02x", ord(substr($ret_buf, $i, 1)));
        return($hex_data);
    }

    // 복호화 함수
    public function decrypt_md5($hex_buf, $key="password") {
        $len = strlen($hex_buf);
        for ($i=0; $i<$len; $i+=2) $buf .= chr(hexdec(substr($hex_buf, $i, 2)));

        $key1 = pack("H*", md5($key));
        //PHP Warning:  Undefined variable $ret_buf, PHP 8.x 무한 루프 방지
        $ret_buf = '';
        //while($buf !== false) {
        //PHP 8.x 무한 루프 방지
        while(isset($buf) && $buf) {
            $m = substr($buf, 0, 16);
            $buf = substr($buf, 16);

            $c = "";
            //PHP Warning:  Uninitialized string offset 16 이하의 숫자, 루프 리미트 16번 중에 남은 횟수가 공으로 돌아서 워닝
            $limit=strlen($m);
            //PHP Fatal error:  Array and string offset access syntax with curly braces
            for($i=0;$i<$limit;$i++) $c .= $m[$i]^$key1[$i];

            $ret_buf .= $m = $c;
            $key1 = pack("H*",md5($key.$key1.$m));
        }
        return($ret_buf);
    }
추천인 3
  • 내사랑
  • 하늘구장
  • 소현세자
10
shadow2fox - 회원등급 : 자연/Level 143 - 포인트 : 2,550,907
레벨 143
경험치 3,055,586

Progress Bar 23%

- 가입일 : 2015-03-10 12:21:44
- 서명 : 인간에게 가장 큰 선물은 자기 자신에게 기회를 주는 것이다. - 크리스 가드너, Chris Gardner -
- 자기소개 : There's never a shortcut to happiness.

댓글3

하늘구장님의 댓글

하늘구장 2021.02.17 19:47
지금은 아니지만 나중을 위해 적용시켜 놓아야 겠네요 감사합니다

내사랑님의 댓글

내사랑 2021.02.16 23:48
PHP 8 엄두도 못내고 있는데 보고 듣자하니 단순하게 몇 줄 짜리 패치로는 어림없다는 것 같더라구요

축하합니다. 첫 댓글로 14경험치를 획득하였습니다.

shadow2fox님의 댓글

shadow2fox 글쓴이 @내사랑 2021.02.16 23:51
패치량이 상당한 것 같습니다. 되도록 치명적 오류(Fatal error)에 관한 내용은 올려보도록 하겠습니다.
Total 242113 페이지
제목 글쓴이 날짜 조회 추천
이윰  🏆 modal 오픈시 modal-dialog 아래 background body 스크롤 안되게 하기 루루아빠 2015.07.16 6,615 0
이윰  🏆 이윰빌더와 그누보드 패치시 수정할 파일들 루루아빠 2015.06.23 6,145 0
이윰  🏆 Google Maps API Key를 발급받아 이윰 스킨에 적용하기 루루아빠 2016.08.24 5,270 0
이윰  댓글+1🏆 게시판 리스트에 무한스크롤 기능 패치 루루아빠 2015.06.08 4,516 0
이윰  🏆 Eyoom Builder 1.2.1 패치 루루아빠 2016.02.15 4,322 0
이윰  댓글+1🏆 dropdown menu 펼쳐지는 위치 조정하기 루루아빠 2015.07.24 4,104 0
이윰  댓글+1🏆 이미지 리사이징 기능 끄기 (큰 이미지가 커졌다가 작아지는 문제 해결) 루루아빠 2015.12.18 3,941 0
이윰  🏆 INDEX 화면을 특정 게시판으로 변경하기 루루아빠 2016.11.06 3,905 0
이윰  댓글+1🏆 SELF-HOSTED로 Jwplayer7.x 사용시 외부 링크(jwpcdn.com)에서 스킨 가져오는 문제 루루아빠 2016.05.11 3,902 0
이윰  댓글+2🏆 Eyoom Builder 1.1.0 패치 루루아빠 2015.05.19 3,894 0
이윰  댓글+1🏆 masonry 사용하는 스킨 가로 갯수(box 수) 늘리기 루루아빠 2015.06.24 3,818 0
이윰  🏆 상단메뉴 아래 화살표 제거와 상단 메뉴 간격 수정 루루아빠 2015.06.01 3,794 0
이윰  🏆 포인트 조회 팝업창으로 뛰우기 루루아빠 2015.09.14 3,683 0
이윰  댓글+1🏆 무한스크롤을 사용하지 않는 일반 게시판을 타 경로에서 모달창으로 불러올 때 배경이미지가 본문에 나타나는 문제 해결 루루아빠 2016.03.05 3,650 0
이윰  🏆 부트스트랩(bootstrap)의 반응형 테이블(table-responsive) 사용시 모바일에서 나타나는 border 없애기 루루아빠 2016.03.04 3,588 0
이윰  댓글+2🏆 사운드클라우드 embed options 제어하기 루루아빠 2015.09.07 3,581 0
이윰  🏆 사운드클라우드와 게시글 정보와의 간격 조정 루루아빠 2015.06.28 3,535 0
이윰  댓글+4🏆 📸 유튜브 썸네일 생성 개선하기 루루아빠 2021.06.24 3,535 3
이윰  🏆 Eyoom Builder 1.1.3 패치 루루아빠 2015.06.05 3,534 0
이윰  댓글+4🏆 새로고침 없이 댓글을 달거나 삭제할 수 있는 ajax 댓글 시스템으로 교체하기 shadow2fox 2018.12.11 3,485 2