뒤로가기
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;
}