개발 꿀팁/PHP

PHP 상용 암호화 복호화 함수

Jammie 2022. 8. 9. 12:27
반응형

1. 암호화 복호화 함수

<?php
define('UC_KEY', 'abc123456');//통합 프로그램의 통신 키
function authcode($string,$operation='DECODE',$key='',$expiry=0)
{
 
    $ckey_length = 4;   
 
 
    $key = md5($key ? $key : UC_KEY);   
 
 
    $keya = md5(substr($key, 0, 16));   
 
 
    $keyb = md5(substr($key, 16, 16));   
 
 
    $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';   
 
 
    $cryptkey = $keya.md5($keya.$keyc);   
 
 
    $key_length = strlen($cryptkey);   
 
 
    $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;   
 
 
    $string_length = strlen($string);   
 
 
    $result = '';   
 
 
    $box = range(0, 255);   
 
 
    $rndkey = array();   
 
 
    for($i = 0; $i <= 255; $i++) {   
 
 
        $rndkey[$i] = ord($cryptkey[$i % $key_length]);   
 
 
    }   
    for($j = $i = 0; $i < 256; $i++) {   
 
 
        $j = ($j + $box[$i] + $rndkey[$i]) % 256;   
 
 
        $tmp = $box[$i];   
 
 
        $box[$i] = $box[$j];   
 
 
        $box[$j] = $tmp;   
 
 
    }   
    for($a = $j = $i = 0; $i < $string_length; $i++) {   
 
 
        $a = ($a + 1) % 256;   
 
 
        $j = ($j + $box[$a]) % 256;   
 
 
        $tmp = $box[$a];   
 
 
        $box[$a] = $box[$j];   
 
 
        $box[$j] = $tmp;   
 
 
        $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));   
 
 
    }   
 
 
 
 
    if($operation == 'DECODE') {   
 
 
        if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {   
 
 
            return substr($result, 26);   
 
 
        } else {   
 
 
                return '';
            }   
 
 
    } else {   
 
 
        return $keyc.str_replace('=', '', base64_encode($result));   
 
 
    }   
 
 
}   
 
 
$ret=  authcode('www.baidu.com','ENCODE', 'abc123456',1);
 
 
echo  $ret .'    ';
echo  authcode($ret,'DECODE','abc123456',1) ;
 
 
?>

2. 상용encrypt 암호화 함수

<?php
/**
  * 문자열 암호화/복호화
  *
  * @param  string     $string    원본 문자열
  * @param  string     $operation 동작 옵션: DECODE: 복호화, 암호화
  * @param  string     $key       키
  *
  * @return string     $result    암호화/복호화된 문자열 처리
  */
 
 private function authcode($string, $operation, $key = '') {
 
      $key = md5($key ? $key : $GLOBALS['auth_key']);
      $key_length = strlen($key); 
 
      $string = $operation == 'DECODE' ? base64decode($string) : substr(md5($string.$key), 0, 8).$string;
      $string_length = strlen($string);
      $rndkey = $box = array();
      $result = '';
 
      for($i = 0; $i <= 255; $i++) {
           $rndkey[$i] = ord($key[$i % $key_length]);
           $box[$i] = $i;
      }
 
      for($j = $i = 0; $i < 256; $i++) {
           $j = ($j + $box[$i] + $rndkey[$i]) % 256;
           $tmp = $box[$i];
           $box[$i] = $box[$j];
           $box[$j] = $tmp;
      }
 
      for($a = $j = $i = 0; $i < $string_length; $i++) {
           $a = ($a + 1) % 256;
           $j = ($j + $box[$a]) % 256;
           $tmp = $box[$a];
           $box[$a] = $box[$j];
           $box[$j] = $tmp;
           $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
      }
 
      if($operation == 'DECODE') {
           if(substr($result, 0, 8) == substr(md5(substr($result, 8).$key), 0, 8)) {
                return substr($result, 8);
           } else {
                return '';
           }
      } else {
           return str_replace('=', '', base64_encode($result));
      } 
 }
?>

 

반응형