뒤로가기

php 커스텀함수


// 문자열 in쿼리 사용시 ''처리 
function arrToString($arr=[]) {
    $str = "";
    if(!empty($arr)){
        $str = "'" . implode("','", $arr) . "'";
    }
    return $str;
}

// 암호화
function encrypt($plaintext, $key) {
    $cipher = "aes-256-cbc"; // 암호화 알고리즘 및 모드
    $ivlen = openssl_cipher_iv_length($cipher);
    $iv = openssl_random_pseudo_bytes($ivlen);
    $ciphertext_raw = openssl_encrypt($plaintext, $cipher, $key, OPENSSL_RAW_DATA, $iv);
    $hmac = hash_hmac('sha256', $ciphertext_raw, $key, true); // HMAC을 생성하여 데이터 무결성 보장
    return base64_encode($iv . $hmac . $ciphertext_raw);
}

// 복호화
function decrypt($ciphertext, $key) {
    $cipher = "aes-256-cbc";
    $c = base64_decode($ciphertext);
    $ivlen = openssl_cipher_iv_length($cipher);
    $iv = substr($c, 0, $ivlen);
    $hmac = substr($c, $ivlen, $sha2len = 32);
    $ciphertext_raw = substr($c, $ivlen + $sha2len);
    $original_plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, OPENSSL_RAW_DATA, $iv);
    $calcmac = hash_hmac('sha256', $ciphertext_raw, $key, true);
    if (hash_equals($hmac, $calcmac)) { // HMAC 일치 확인
        return $original_plaintext;
    }
    return false; // HMAC이 일치하지 않으면 복호화 실패
}

// 문자열 마스킹 처리
function setMasking($obj,$t,$t2="") {
    $result = "";
    if(empty($obj)) return $result;

    if(!empty($t)) {
        if($t == "str"){
            if(!empty($t2)) {
                switch($t2) {
                    case "left"   : $result = preg_replace('/.(?=.)/u', '*', $obj); break;
                    case "center" : $result = preg_replace('/.(?=.$)/u', '*', $obj); break;
                    case "right"  : $result = preg_replace('/.(?!..)/u', '*', $obj); break;
                    case "all"    : $result = preg_replace('/./u', '*', $obj); break;
                    default       : $result = preg_replace('/.(?=.$)/u', '*', $obj); break;
                }
            }else {
                $result = preg_replace('/.(?=.$)/u', '*', $obj);
            }
        }else if($t == "num"){
            $Tel = format_tel($obj);
            $strLen = strlen($Tel);

            switch($strLen) {
                case 12 : $result = preg_replace('/([0-9]+)-([0-9]+)-([0-9]{4})/', '${1}-***-$3', $Tel); break;
                case 13 : $result = preg_replace('/([0-9]+)-([0-9]+)-([0-9]{4})/', '${1}-****-$3', $Tel); break;
                default : $result = preg_replace('/([0-9]+)-([0-9]+)-([0-9]{4})/', '${1}-****-$3', $Tel); break;
            }
            $result = str_Replace('-','',$result);
        }
    }
    
    return $result;
}
// 전화번호 정규식
function format_tel($tel) {
    $tel = preg_replace('/[^0-9]/', '', $tel);
    return preg_replace('/(^02.{0}|^01.{1}|^15.{2}|^16.{2}|^18.{2}|[0-9]{3})([0-9]+)([0-9]{4})/', '$1-$2-$3', $tel);
}

// 문자열 랜덤 추출 length길이만큼
function GenerateString($length){
    $characters = "0123456789";
    //$characters .= "abcdefghijklmnopqrstuvwxyz";
    $characters .= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    $string_generated = "";         
    $nmr_loops = $length;     
    while ($nmr_loops--)      {   
        $string_generated .= $characters[mt_rand(0, strlen($characters) - 1)];     
    }           
   return $string_generated;  
}