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

페이지 정보

shadow2fox shadow2fox 3,205 3 3 2021.02.16 23:29:28

본문

📝 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
  • 012i1052u
    내사랑
  • skyfield4u
    하늘구장
  • 소현세자
shadow2fox
10
shadow2fox - 회원등급 : 자연/Level 148 - 포인트 : 2,625,103
레벨 148
경험치 3,275,140

Progress Bar 26.45%

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

댓글3

하늘구장님의 댓글

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

내사랑님의 댓글

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

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

shadow2fox님의 댓글

1/26
shadow2fox
shadow2fox 글쓴이 @내사랑 2021.02.16 23:51
패치량이 상당한 것 같습니다. 되도록 치명적 오류(Fatal error)에 관한 내용은 올려보도록 하겠습니다.

Total 767426 페이지

제목 글쓴이 날짜 조회 추천
그누•영카트  🏆 영카트 상품 증가 감소 선택 문자 바꾸기 루루아빠 2015.05.01 3.7k 0
에디터  🏆 smarteditor2를 이용하여 이미지 업로드시 이미지 위에 타이틀 팝업창 없애기 루루아빠 2015.04.11 3.7k 0
이윰  댓글+2🏆 쪽지 보낼때 캡챠코드 사용하지 않기 - 오류 루루아빠 2015.09.24 3.7k 0
이윰  댓글+1🏆 디바이스에 따른 내용 보이기 숨기기 루루아빠 2015.03.20 3.7k 0
이윰  🏆 📸 여분필드를 활용한 간단한 게시판 입력 서식 만들기 루루아빠 2016.05.13 3.7k 0
에디터  댓글+1🏆 에디터상에서 이미지 가운데 정렬 루루아빠 2015.05.23 3.7k 0
이윰  🏆 스크린 사이즈에 따른 미디어 쿼리(container 크기 변화) 루루아빠 2015.06.25 3.7k 0
이윰  🏆 모바일에서는 링크 이동시 로딩중 이미지 띄우기 루루아빠 2015.06.17 3.7k 1
JavaScript  🏆 모달창(Modal Window) backdrop(모달창 바깥 부분) 클릭시 모달창 닫지 않기 루루아빠 2016.05.06 3.7k 0
그누•영카트  🏆 메인화면에 블로그 형태로 게시판 보이기 루루아빠 2015.03.10 3.6k 0
에디터  🏆 smarteditor2 로 사진 첨부시 에디터 크기에 맞게 리사이즈 루루아빠 2015.04.23 3.6k 0
제로  🏆 카테고리/페이지 상관없이 공지는 무조건 보이게 루루아빠 2006.05.26 3.6k 0
제로  🏆 💾 회원가입시 아이디체크 (중복, 필터링, 검색, 사용시 입력창으로..) 루루아빠 2005.07.07 3.6k 0
이윰  🏆 갤러리 목록에서 현재 보고있는 게시물에 "열랄중" 표시하기 루루아빠 2015.06.20 3.6k 0
에디터  🏆 CKeditor4.x 에디터 툴바 고정후 스크롤시 firefox에서 가로폭 늘어나는 문제 해결 루루아빠 2016.09.18 3.6k 0
그누•영카트  🏆 영카트 5.0.36 패치 루루아빠 2015.06.04 3.6k 0
이윰  댓글+1🏆 스타일박스 패치, ios 관련 패치 루루아빠 2015.07.09 3.6k 0
이윰  댓글+2🏆 게시판 카테고리 탭 형식으로 만들기 루루아빠 2015.04.21 3.6k 0
에디터  🏆 CKeditor4.x 에디터 상 엔터를 쉬프트+엔터 바꾸기 루루아빠 2015.04.24 3.6k 0
그누•영카트  🏆 접속자 관리에서 브라우저와 OS 종류를 추가해보자 루루아빠 2015.07.20 3.6k 0
제로  🏆 💾 [스킨만들기] list_foot.php(목록출력 마무리 부분)의 설명입니다 루루아빠 2005.06.23 3.6k 0
이윰  🏆 로그인을 메인으로 - 회원제 사이트 - 폐쇄형 사이트용 루루아빠 2015.07.08 3.6k 0
에디터  🏆 CKeditor4.x Toolbar Icon 순서 입맛대로 정렬하기 루루아빠 2016.06.04 3.6k 0
jQuery  댓글+1🏆 게시글 본문 내에 첨부된 이미지가 엑박으로 뜨는 경우 특정 이미지로 대체하기 루루아빠 2016.05.21 3.6k 0
그누•영카트  🏆 영카트 5.2.3 패치 루루아빠 2016.10.19 3.6k 0
이윰  🏆 이윰빌더 1.1.4 패치 루루아빠 2015.06.08 3.6k 0
제로  🏆 쓰기에서 허용태그 미리보여주기 루루아빠 2005.09.11 3.6k 0
제로  댓글+1🏆 회원가입시 자동환영 쪽지보내기! 루루아빠 2006.03.09 3.6k 0
제로  🏆 📸 💾 포털 사이트의 로그인 기능 흉내내기 루루아빠 2006.05.24 3.6k 0
그누•영카트  🏆 그누보드 5.1.15 패치 루루아빠 2016.03.21 3.6k 0