서비스문의

  1. 서비스
  2. 서비스문의
게시물보기 #1,410

질문 채팅서버 미할당과 php7.2 버전에서 mcrypt_* 함수 관련해서 문의드립니다!

0

안녕하세요!

채팅서버 미할당과 php7.2 버전에서 mcrypt_* 함수 관련해서 문의드립니다!


1.

관리페이지에서 추가한 채널을 더블클릭해서 채팅창을 열면 채팅서버에 바로 연결이 되는데요.

사용자 페이지에 채팅을 추가했을 경우에는 계속 오프라인(Error Code:201)이 뜹니다.

이 상태에서 관리페이지에서 채널을 더블클릭하여 글을 쓰거나 좀 지나면 사용자 페이지에서도 그때 연결을 성공하는데

어떤 부분을 체크하면 될까요??


2.

php7.2 버전을 사용중이라 mcrypt_* 관련함수가 안 되서 다른 글의 답변을 보고 아래와 같이 수정했습니다.

수정 후 접속하니 '잘못된 접근입니다.(ErrorCode:999)' 라고 나오는데

어떤 부분을 체크하면 될까요??


A. -------------------------------------------------------------------------

default.func.php 및 채팅을 붙인 사용자 페이지의 MiniTalkEncoder, MiniTalkDecoder 함수 변경

function MiniTalkEncoder($value) {
    global $_MINITALK_KEY;
    $padSize = 16 - (strlen($value) % 16);
    $value = $value.str_repeat(chr($padSize),$padSize);
    $output = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$_MINITALK_KEY,$value,MCRYPT_MODE_CBC,str_repeat(chr(0),16));
    return base64_encode($output);
}

function MiniTalkDecoder($value) {
    global $_MINITALK_KEY;
    $value = base64_decode($value);
    $output = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$_MINITALK_KEY,$value,MCRYPT_MODE_CBC,str_repeat(chr(0),16));
    $valueLen = strlen($output);
    if ($valueLen % 16 > 0) $output = '';
    $padSize = ord($output{$valueLen - 1});
    if (($padSize < 1) || ($padSize > 16)) $output = '';
    for ($i=0;$i<$padSize;$i++) {
        if (ord($output{$valueLen - $i - 1}) != $padSize) $output = '';
    }
    return substr($output,0,$valueLen-$padSize);
}


B. -------------------------------------------------------------------------

install.php에 $checking_mcrypt = true; 변경


아자즐
아자즐
LV.1 65/100
2020-11-09 19:11:46
답변 1
0

2개의 함수가 제대로 수정되지 않은 것으로 보입니다.


MinitalkEncoder 함수의

$output = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$_MINITALK_KEY,$value,MCRYPT_MODE_CBC,str_repeat(chr(0),16)); 부분을

$output = openssl_encrypt($value,'AES-256-CBC',$_MINITALK_KEY,OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,str_repeat(chr(0),16)); 으로


MinitalkDecoder 함수의

$output = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$_MINITALK_KEY,$value,MCRYPT_MODE_CBC,str_repeat(chr(0),16)); 부분을

$output = openssl_decrypt($value,'AES-256-CBC',$_MINITALK_KEY,OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,str_repeat(chr(0),16)); 으로 변경 후 시도해보시기 바랍니다.

알쯔
알쯔
LV.50 114,498/114,498
2020-11-10 17:22:54
아자즐
아자즐

아 위에 잘 못 적었었네요!!

말씀하신 부분  참고해서 아래와 같이 변경했는데 똑같이 '잘못된 접근입니다.(ErrorCode:999)' 라고 나옵니다.


----------------------------------- default.func.php --------------------------------------

function MiniTalkEncoder($value,$key='') {
    $key = $key ? $key : $_ENV['key'];
    $padSize = 16 - (strlen($value) % 16);
    $value = $value.str_repeat(chr($padSize),$padSize);
   $output = openssl_encrypt($value,'AES-256-CBC',$key,OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,str_repeat(chr(0),16));
    return base64_encode($output);
}

function MiniTalkDecoder($value,$key='') {
    $key = $key ? $key : $_ENV['key'];
    $value = base64_decode($value);
   $output = openssl_decrypt($value,'AES-256-CBC',$key,OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,str_repeat(chr(0),16));
    $valueLen = strlen($output);
    if ($valueLen % 16 > 0) $output = '';

    $padSize = ord($output{$valueLen - 1});
    if (($padSize < 1) || ($padSize > 16)) $output = '';

    for ($i=0;$i<$padSize;$i++) {
        if (ord($output{$valueLen - $i - 1}) != $padSize) $output = '';
    }

    return substr($output,0,$valueLen-$padSize);
}



----------------------------------- 사용자페이지.php --------------------------------------

function MiniTalkEncoder($value) {
    global $_MINITALK_KEY;
    $padSize = 16 - (strlen($value) % 16);
    $value = $value.str_repeat(chr($padSize),$padSize);
    $output = openssl_encrypt($value,'AES-256-CBC',$_MINITALK_KEY,OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,str_repeat(chr(0),16));
    return base64_encode($output);
}

function MiniTalkDecoder($value) {
    global $_MINITALK_KEY;
    $value = base64_decode($value);
    $output = openssl_decrypt($value,'AES-256-CBC',$_MINITALK_KEY,OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,str_repeat(chr(0),16));
    $valueLen = strlen($output);
    if ($valueLen % 16 > 0) $output = '';
    $padSize = ord($output{$valueLen - 1});
    if (($padSize < 1) || ($padSize > 16)) $output = '';
    for ($i=0;$i<$padSize;$i++) {
        if (ord($output{$valueLen - $i - 1}) != $padSize) $output = '';
    }
    return substr($output,0,$valueLen-$padSize);
}

알쯔
미니톡이 적용된 웹사이트 주소를 알려주시면 한번 확인해보도록 하겠습니다.
알쯔
아자즐
아자즐
질문자 및 답변자에게만 공개된 댓글입니다.
답변 작성하기
답변을 입력하려면 먼저 로그인을 하여야 합니다.
목록 질문하기